adoquery中有字段id,the_date,worker,spid分别对应xml文件中的ToCorpID,ActDate,Actor,Code
如何导出下面格式的xml文件?用adoquery1.SaveToFile无法生成合适的格式,还有没有其他的办法呢。
<?xml version="1.0" encoding="UTF-8"?>
<Document Version="3.0" xsi:noNamespaceSchemaLocation="终端接口XML Schema-3.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Events>
<Event MainAction="WareHouseOut" Name="DestoryWareHouseOut">
<DataField>
<Data ToCorpID="" ActDate="2013-06-27 21:11:11" Actor="1111" Code="665"/>
</DataField>
</Event>
</Events>
</Document>
如何导出下面格式的xml文件?用adoquery1.SaveToFile无法生成合适的格式,还有没有其他的办法呢。
<?xml version="1.0" encoding="UTF-8"?>
<Document Version="3.0" xsi:noNamespaceSchemaLocation="终端接口XML Schema-3.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Events>
<Event MainAction="WareHouseOut" Name="DestoryWareHouseOut">
<DataField>
<Data ToCorpID="" ActDate="2013-06-27 21:11:11" Actor="1111" Code="665"/>
</DataField>
</Event>
</Events>
</Document>
解决方案 »
- 这个问题让我困惑了很久````````````````````````````````````
- 遇到一个不知道解决的sql.add 问题(add字符串太长)
- 鼠标接串口,怎么读取串口的变化信息
- 求助:reportbuilder嵌套报表怎样做?一个主表/两个从表,能实现吗?
- TListBox.AddItem(Item: String; AObject: TObject)中加入AObject后,怎么在后来取得该AObject?
- DBGrid的问题!!!
- foxyy8888领100分,顺便请教
- 关于人生价值的问题?
- 有关网络接收与发送数据的问题?!接收到的数据与发送端不同?!
- 各位同道,Delphi 6的D版终于来了!!!!!!
- 大家帮我看看错在哪里?
- BDE和ODBC关系
uses
...., XMLDoc, XMLIntf, ADODB;....procedure TfrmTestXML.btnToXmlFileClick(Sender: TObject);
const
ct_root = 'Document';
ct_child1 = 'Events';
ct_child2 = 'Event';
ct_child3 = 'DataField';
ct_child4 = 'Data';
ct_xmlFileName = 'd:\xml\DataTableToXMLFile.xml';
var
temxml: TXMLDocument;
temnode, newxmlnode, rootnode: IXMLnode;
adoquery1: TAdoquery;
begin
adoquery1 := TAdoquery.Create(application);
adoquery1.SQL.Add('select id,the_date,worker,spid from dataTable');
adoquery1.Open;
temxml := TXMLDocument.Create(self);
temxml.Active := true;
temxml.Version := '1.0';
temxml.Encoding := 'UTF-8';
rootnode := temxml.AddChild(ct_root);
rootnode.SetAttribute('Version', '3.0...');
newxmlnode := rootnode.AddChild(ct_child1);
newxmlnode := newxmlnode.AddChild(ct_child2);
newxmlnode.SetAttribute('MainAction', 'WareHouseOut..');
newxmlnode := newxmlnode.AddChild(ct_child3);
adoquery1.First;
while Not adoquery1.eof do
begin
temnode := newxmlnode.AddChild(ct_child4);
temnode.SetAttribute('ToCorpID', adoquery1.FieldByName('id').AsString);
temnode.SetAttribute('Actdate', adoquery1.FieldByName('the_date').AsString);
temnode.SetAttribute('Actor', adoquery1.FieldByName('worker').AsString);
temnode.SetAttribute('Code', adoquery1.FieldByName('spid').AsString);
adoquery1.Next;
end;
adoquery1.Close;
adoquery1.Free;
temxml.SaveToFile(ct_xmlFileName);
temxml.Free;
end;
您的方法果然可行,只是下面这两处地方不符合格式,如何处理?本人初学xml,望赐教。谢谢
<Document Version="3.0" xsi:noNamespaceSchemaLocation="终端接口XML Schema-3.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Event MainAction="WareHouseOut" Name="DestoryWareHouseOut">
rootnode.SetAttribute('Vexsi:noNamespaceSchemaLocation', '终端接口XML Schema-3.0.xsd');
rootnode.SetAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
newxmlnode := rootnode.AddChild(ct_child1);
newxmlnode := newxmlnode.AddChild(ct_child2);
newxmlnode.SetAttribute('MainAction', 'WareHouseOut');
newxmlnode.SetAttribute('Name', 'DestoryWareHouseOut');
按照您说的方法实现了,多谢。
不过却发现个问题,它只会按下面的顺序排列,明明把Version="3.0"放到前面也不行。
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="终端接口XML Schema-3.0.xsd" Version="3.0">我想让按照下面顺序排列,不知道怎么处理?修改写入的顺序也无法实现.
<Document Version="3.0" xsi:noNamespaceSchemaLocation="终端接口XML Schema-3.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
temxml.Version := '1.0';
temxml.Encoding := 'UTF-8';
rootnode := temxml.AddChild(ct_root);
rootnode.SetAttribute('Version', '3.0');
rootnode.SetAttribute('xsi:noNamespaceSchemaLocation', '终端接口XML Schema-3.0.xsd');
rootnode.SetAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
newxmlnode := rootnode.AddChild(ct_child1);
newxmlnode := newxmlnode.AddChild(ct_child2);
newxmlnode.SetAttribute('MainAction', 'WareHouseOut');
newxmlnode.SetAttribute('Name', 'DestoryWareHouseOut');
newxmlnode := newxmlnode.AddChild(ct_child3);