以前遇到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