procedure TForm1.Button3Click(Sender: TObject);
//var
  //strs:TStringList;
  //i,j:integer;
  //dir:string;
begin
  SaveDialog1.Options :=[ofOverwritePrompt];
  SaveDialog1.Filter :='XML files(*.xml)|*.xml|all Files(*.*)|*.*';
  SaveDialog1.DefaultExt:='*.xml';
  SaveDialog1.InitialDir := ExtractFilePath (Application.ExeName);{
  //保存为TXT文件
  strs :=TStringList.Create;
  try
    for i:=0 to ListView1.Items.Count-1 do
      begin
         strs.Add(ListView1.Items[i].Caption);//保存标题
         for j:=0 to ListView1.Items[i].SubItems.Count-1 do //保存子条目
           strs.Add(#9+ListView1.Items[i].SubItems[j]);
      end;    if SaveDialog1.Execute then
    strs.SaveToFile(SaveDialog1.FileName);
  finally
    strs.Free;
  end;
}//保存为XML文件
  if Form1.ListView1.Selected<>nil then
     if SaveDialog1.Execute then
        begin
          with XMLDocument2.XML do            begin
              //Add('<?xml version="1.0" standalone="yes"?>');
              Add('<Courseware>');
              Add('<RefFiles>');
                   begin
                     Add('<src>');
                     Add(ListView1.Selected.Caption);
                     Add('</src>');
                     Add('<begin>');
                     Add(ListView1.Selected.SubItems.Strings[0]);
                     Add('</begin>');
                     Add('<dur>');
                     Add(ListView1.Selected.SubItems.Strings[1]);
                     Add('</dur>');
                     Add('<title>');
                     Add(ListView1.Selected.SubItems.Strings[2]);
                     Add('</title>');
                   end;
              Add('</RefFiles>');
              Add('</Courseware>');
            end;            XMLDocument2.Active := true;
            XMLDocument2.Encoding:='GB2312';
            XMLDocument2.SaveToFile(SaveDialog1.FileName);
        end
     else
  else
    showMessage('请选择需要保存的文件');end;
以上这个procedure能把XML文件保存下来,但是呢,只能保存E文的,不能保存中文的
请问有什么办法解决保存中文出错的问题吗?
出错信息是文件包含有不正确的字符串(好象又是不认得的,大概就是这意思)

解决方案 »

  1.   

    var
      node,node1,ValueNode:IXMLNode;
      xml:TXMLDocument;
    if Form1.ListView1.Selected<>nil then
         if SaveDialog1.Execute then
            begin
                xml:=TXMLDocument.Create(nil);
                xml.Active :=true;
                xml.Version :='1.0';
                xml.Encoding:='GB2312';            node:=xml.AddChild('Courseware');//添加根节点            node1:=node.AddChild('RefFiles');//添加节点            ValueNode:=node1.AddChild('src');
                ValueNode.Text:=ListView1.Selected.Caption;
                ValueNode:=node1.AddChild('begin');
                ValueNode.Text:=ListView1.Selected.SubItems.Strings[0];
                ValueNode:=node1.AddChild('dur');
                ValueNode.Text:=ListView1.Selected.SubItems.Strings[1];
                ValueNode:=node1.AddChild('title');
                ValueNode.Text:=ListView1.Selected.SubItems.Strings[2];
                
                xml.SaveToFile(SaveDialog1.FileName);
            end
         else
      else
        showMessage('请选择需要保存的文件');没有调试的,自己试试