用XMLDocument怎么样生成如下格式的XML文件?
<?xml version="1.0" encoding="GBK" ?> 
<xml xmlns:s="表结构标识" xmlns:a="属性标识" xmlns:rs="数据项目" xmlns:z="行记录">
<rs:data>
 <rs:Table id="A1">
    <z:row A00="42B73726-7E3A-483A-B8F1-1B2E9149AAA7" A02="张三" A03="男" A04="汉族" A05A="大学"/> 
    <z:row A01="5A268CBE-30C4-477E-80A6-B4C70022C064" A02="李四" A03="男" A04="布依族" A05A="大学"/> 
     
 </rs:Table>
 <rs:Table id="A2">
     <z:row A01="42B73726-7E3A-483A-B8F1-1B2E9149AAA7" A20="" A21="" A22="" A23=""/> 
     <z:row A00="5A268CBE-30C4-477E-80A6-B4C70022C064" A20="" A21="" A22="" A23=""/> 
       </rs:Table>
   
</rs:data>
</xml> 从数据库多表导出生成以上XML。还有一点就是原数据库的ID是数字,怎么变成42B73726-7E3A-483A-B8F1-1B2E9149AAA7格式的字符串?
 谢谢了。

解决方案 »

  1.   

    通过节点生成XML文件。代码仅代参考:
      FileName:=ExtractFileDir(Application.ExeName)+'\my.xml';
      ADoc:=TNativeXml.CreateName('根结点');              
      Root¡±µÄXML¶ÔÏó
      try
        ADOC.ExternalEncoding := seUTF8;       
        ADoc.Declaration.Encoding:='gb2312';
        ADoc.XmlFormat:=xfReadable;
        ADoc.Root.WriteAttributeString('Root','下属结点');
        ANode := ADoc.Root.NodeNew('Record'); 
        ANode.WriteAttributeString('AAAAA','ccccc');     
        ANode.WriteAttributeString('BBBBB','ddddd');     
        ANode.WriteString('First','www.sÖйúina.com');  
        ANode.WriteString('Second','192.1Öйú68.1.1');
        Edit1.Text:=ANode.Nodes[0].Value;
        Edit2.Text:=ANode.Nodes[1].ValueUnicode;
        ADoc.SaveToFile(FileName);                                    
        Memo1.Lines.Text:=ADOc.WriteToString;                  
      finally
        ADoc.Free;
      end;
      

  2.   

      xmlDoc   :=   TXMLDocument.Create(nil);
        try
            xmlDoc.Active   :=   True;
            xmlDoc.Version   :=   '1.0';
            xmlDoc.Encoding   :=   'GBK';
            aNode   :=   xmlDoc.AddChild( 'xml');
            aNode.SetAttribute('xmlns:s','表结构标识');
            aNode.SetAttribute('xmlns:a','属性标识');
            aNode.SetAttribute('xmlns:rs','数据项目');
            aNode.SetAttribute('xmlns:z','行记录');
            aNode   :=  aNode.AddChild('rs:data');
            aNode   :=  aNode.AddChild('rs:Table');
            aNode.SetAttribute('id','A1');
                  while not Eof do
                    begin
                     aNode   :=  aNode.AddChild('z:row');
                      for i:=0 to DataM.ADOQuery1.Fields.Count-1 do
                       begin
                          
                          aNode.SetAttribute(''+DataM.ADOQuery1.Fields  [i].DisplayName+'',''+DataM.ADOQuery1.Fields[i].asstring+'');
                          
                       end;
                      aNode.PreviousSibling;
                    next
                   end;       
     //Save to XML File
            xmlDoc.SaveToFile( 'c:\test.xml ');
        finally
            xmlDoc   :=   nil; 
        end;   这样的结果不太正常,记录在z:row的下加子节点,怎么样才能写完一个后指向上一节点?aNode.PreviousSibling不管用