从数据库导出XML文件

thisisxutao 2012-09-01 08:50:44
用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格式的字符串?
谢谢了。
...全文
150 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
thisisxutao 2012-09-02
  • 打赏
  • 举报
回复
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不管用
lyhoo163 2012-09-02
  • 打赏
  • 举报
回复
通过节点生成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,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧