2010-10-21 208 views
1

我需要使用Delphi处理XML文件。读取和写入XML文件

我想将DBGrid中的xml数据呈现给用户,并将用户所做的更改保存在XML文件中。

例如在下面的xml中(向用户呈现),如果用户changed City of ABC under clientadded a new customer with NickName as "AAA"这些更改应该反映在XML文件中。

<Data LinkID=”0”> 
    <Client> 
     <Item Name=”ABC” Mobile=”1234” City=”IN” /> 
     <Item Name=”PQR” Mobile=”5678” City=”IN” /> 
    </Client> 
    <Customer> 
    <Item NickName=”XYZ” Phone=”1254” City=”IN” /> 
    <Item NickName=”MNO” Phone =”41255” City=”IN” /> 
    </Customer> 
</Data> 

我正在使用XMLDocument和ClientDataSet来实现这一目标,但没有成功。

任何人都可以帮助我实现这个目标吗?

+2

Bharat,检查这个问题,看看如何保存一个'TClientDataset'到一个XML文件http://stackoverflow.com/questions/3848853/using-delphi7-tclientdataset-is-it-possible-to-have-it- save-its-xml-contents-in/3848892#3848892 – RRUZ 2010-10-21 12:57:36

+0

你能详细说明你遇到的问题或错误吗?你还可以添加你尝试使用的代码吗? – 2010-10-21 12:57:37

+0

@Vicens:据我所知,错误可能来自某些字段的类型不匹配,我得到“数据包不匹配”错误 – Bharat 2010-10-21 13:10:59

回答

4

问题在于我使用的XML文件。

XML文件应该采用指定格式,必须有<METADATA> and <ROWDATA>标签。

我将xml更改为该格式。

<?xml version="1.0" standalone="yes"?> 
<DATAPACKET Version="2.0"> 
<METADATA> 
<FIELDS> 
<FIELD attrname="Name" fieldtype="string" WIDTH="50"/> 
<FIELD attrname="Mobile" fieldtype="string" WIDTH="20"/> 
<FIELD attrname="City" fieldtype="string" WIDTH="20"/> 
</FIELDS><PARAMS CHANGE_LOG="6 1 8"/> 
</METADATA> 
<ROWDATA> 
<ROW Name="ABC" Mobile="1234" City="IN"/> 
<ROW Name="PQR" Mobile="5678" City="IN"/> 
<ROW Name="AAA" Mobile="7894" City="IN"/> 
<ROW Name="MNO" Mobile="4569" City="IN"/> 
<ROW Name="ABC" Mobile="45685" City="IN"/> 
</ROWDATA> 
</DATAPACKET> 

接下来我用 ClientDataSet1.LoadFromFile('E:\projects\XML\Sample App with CDS\XmlText.xml');读取XML文件。

在网格中完成修改后,我使用ClientDataSet1.SaveToFile('E:\projects\XML\Sample App with CDS\XmlText.xml',dfXML);方法保存回XML。

为此,不需要XMLDocument。