2010-10-21 201 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。