以前遇到Delphi處理XML文件就感覺頭疼,不知道該用哪種方法比較好,後來知道了msxml方法,個人認為,msxml方法可能不是最好的,不過我個人使用習慣了,覺得還挺好用,所以現在把以前自己讀寫XML的例子發上來,希望能為你提供參考。先了解一下msxml,msxml實際上是Delphi導入Windows的msxml2.dll,所以最終是使用的Windows的方法去解析的XML文件。在PHP中對XML的解析也是用的MSXML,與Delphi的各函數都非常類似。使用時需要在uses中加入msHtml。
使用msxml讀取XML:
01
procedure TForm1.LoadXML(XMLStr: string);
02
var
03
xmldoc: IXMLDOMDocument;
04
rNode, usrNode: IXMLDOMNode;
05
I: Integer;
06
begin
07
XMLdoc := CoDOMDocument.Create;
08
//可以使用這個函數從文件中加載XML
09
//xmldoc.load('d:/XML.txt');
10
XMLdoc.loadXML(XMLStr);
11
rNode := XMLdoc.selectSingleNode('UserList');
12
if rNode <> nil then begin
13
for I := 0 to rNode.childNodes.length - 1 do begin
14
usrNode := rNode.childNodes[I];
15
if usrNode.nodeName = 'User' then begin
16
Memo2.Lines.Add('Name: ' + usrNode.attributes.getNamedItem('Name').text);
17
Memo2.Lines.Add('ID: ' + usrNode.attributes.getNamedItem('ID').text);
18
if usrNode.selectSingleNode('Website') <> nil then
19
Memo2.Lines.Add('Website: ' + usrNode.selectSingleNode('Website').text);
20
if usrNode.selectSingleNode('Intro') <> nil then
21
Memo2.Lines.Add('Intro: ' + usrNode.selectSingleNode('Intro').text);
22
23
Memo2.Lines.Add('');
24
end;
25
end;
26
end;
27
XMLdoc := nil;
28
end;
使用msxml寫入XML文件:
01
procedure TForm1.UpdateXml(XMLStr: string);
02
var
03
xmldoc: IXMLDOMDocument;
04
rNode, usrNode, webNode, introNode, commentNode: IXMLDOMNode;
05
newAttr: IXMLDOMAttribute;
06
begin
07
XMLdoc := CoDOMDocument.Create;
08
//從文件中加載XML
09
//xmldoc.load('d:/XML.txt');
10
XMLdoc.loadXML(XMLStr);
11
rNode := XMLdoc.selectSingleNode('UserList');
12
if rNode <> nil then begin
13
usrNode := XMLdoc.createElement('User');
14
//若使用以下方式創建NODE,則該NODE不支持一些方法,比如attributes.setNamedItem
15
//這種方法創建的NODE的attributes為nil
16
//usrNode := XMLdoc.createTextNode('User');
17
rNode.appendChild(usrNode);
18
newAttr := XMLdoc.createAttribute('Name');
19
newAttr.nodeValue := 'Chen';
20
usrNode.attributes.setNamedItem(newAttr);
21
newAttr := XMLdoc.createAttribute('ID');
22
newAttr.nodeValue := '3';
23
usrNode.attributes.setNamedItem(newAttr);
24
webNode := XMLdoc.createElement('Website');
25
webNode.appendChild(XMLdoc.createCDATASection('http://www.google.com'));
26
usrNode.appendChild(webNode);
27
introNode := XMLdoc.createElement('Intro');
28
introNode.appendChild(XMLdoc.createTextNode('I come from TianJin.'));
29
usrNode.appendChild(introNode);
30
commentNode := XMLdoc.createElement('Comment');
31
commentNode.appendChild(XMLdoc.createComment('This is a comment!'));
32
usrNode.appendChild(commentNode);
33
end;
34
XMLdoc.save('d:\test.XML');
35
XMLdoc := nil;
36
end;
下面是供測試用的XML文檔代碼,請復制保存成XML格式的文件。
vIEw source