博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Delphi 中的 XMLDocument 类详解(14) - 遍历 XML 文件
阅读量:6977 次
发布时间:2019-06-27

本文共 2406 字,大约阅读时间需要 8 分钟。

unit
 Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls;
type
TForm1 
=
 
class
(TForm)
XMLDocument1: TXMLDocument;
Button1: TButton;
Button2: TButton;
procedure
 Button1Click(Sender: TObject);
procedure
 Button2Click(Sender: TObject);
end
;
var
Form1: TForm1;
implementation
{
$R *.dfm
}
//
读取 xml 的函数
{
功能1: 传入一个节点参数, 返回节点及其包含的所有内容;
功能2: 排除了空节点.
}
function
 ReadXml(node: IXMLNode): 
string
;
var
nodeList,attrList: IXMLNodeList;
str,strName,strValue: 
string
;
i: Integer;
begin
Result :
=
 
''
;
if
 
not
 node.HasChildNodes 
then
 Exit;
attrList :
=
 node.AttributeNodes; 
{
根节点的属性列表
}
nodeList :
=
 node.ChildNodes; 
{
根节点下的子节点列表
}
str :
=
 
'
<
'
 
+
 node.NodeName;
{
先读取属性
}
for
 i :
=
 
0
 
to
 attrList.Count 
-
 
1
 
do
begin
strName :
=
 attrList[i].NodeName;
strValue :
=
 attrList[i].NodeValue;
str :
=
 str 
+
 
'
 
'
 
+
 strName 
+
 
'
=
'
 
+
 AnsiQuotedStr(strValue, 
'
"
'
);
end
;
str :
=
 str 
+
 
'
>
'
 
+
 sLineBreak; 
{
sLineBreak 是常量, 相当于 #13#10
}
{
读取子节点
}
for
 i :
=
 
0
 
to
 nodeList.Count 
-
 
1
 
do
begin
strName :
=
 nodeList[i].NodeName;
if
 nodeList[i].IsTextElement 
then
begin
strValue :
=
 nodeList[i].NodeValue;
str :
=
 str 
+
 
'
<
'
 
+
 strName 
+
 
'
>
'
 
+
 strValue 
+
 
'
</
'
 
+
 strName 
+
 
'
>
'
 
+
 sLineBreak;
end
 
else
 
if
 nodeList[i].HasChildNodes 
then
begin
str :
=
 str 
+
 ReadXml(nodeList[i]); 
{
这是最关键的递归调用
}
str :
=
 str 
+
 
'
</
'
 
+
 strName 
+
 
'
>
'
 
+
 sLineBreak; 
{
封口
}
end
;
end
;
str :
=
 str 
+
 
'
</
'
 
+
 node.NodeName 
+
 
'
>
'
{
封口
}
Result :
=
 str;
end
;
//
调用测试(
1
):
procedure
 TForm1.Button1Click(Sender: TObject);
var
str,s1,s2: 
string
;
begin
XMLDocument1.LoadFromFile(
'
c:\temp\test.xml
'
);
{
必须用万一提供的 xml 测试文件, 才能有相同的返回值
}
{
读取文件头
}
s1 :
=
 AnsiQuotedStr(XMLDocument1.Version, 
'
"
'
); 
{
读出版本, 并添加双引号
}
s2 :
=
 AnsiQuotedStr(XMLDocument1.Encoding, 
'
"
'
); 
{
读出字符集, 并添加双引号
}
str :
=
 Format(
'
<?xml version=%s encoding=%s?>
'
,[s1,s2]); 
{
这就是文件头了
}
str :
=
 str 
+
 sLineBreak 
+
 ReadXml(XMLDocument1.DocumentElement);
ShowMessage(str); 
{
返回 xml 包含问头在内的所有内容
}
end
;
//
调用测试(
2
)
procedure
 TForm1.Button2Click(Sender: TObject);
var
str: 
string
;
node: IXMLNode;
begin
XMLDocument1.LoadFromFile(
'
c:\temp\test.xml
'
);
node :
=
 XMLDocument1.DocumentElement.ChildNodes[
0
];
str :
=
 ReadXml(node);
ShowMessage(str); 
{
返回返回根节点下第一个子节点的所有内容
}
end
;
end
.
本文转自黄聪博客园博客,原文链接:http://www.cnblogs.com/huangcong/archive/2010/08/27/1809952.html,如需转载请自行联系原作者
你可能感兴趣的文章
C语言:在屏幕上输出信息
查看>>
C语言存储类关键字
查看>>
万能删除代码
查看>>
基于kryo序列化方案的memcached-session-manager多memcached...
查看>>
group by 查找订单的最新状态 join
查看>>
Ext Scheduler Web资源甘特图控件
查看>>
linux下查看nginx,apache,mysql,php的编译参数
查看>>
mongodb主从设置,capped collections等常用命令集合
查看>>
菜鸟学***——菜鸟的旅程
查看>>
物理层
查看>>
tomcat配置tomcat-redis-session-manager
查看>>
XenApp_XenDesktop_7.6实战篇之八:申请及导入许可证
查看>>
oracle--查看表空间大小以及修改表空间大小
查看>>
CSS float浮动的深入研究、详解及拓展(二)
查看>>
Java Web的Maven项目中Properties文件的使用(2)
查看>>
终于申请博客了
查看>>
foj2024
查看>>
linux之shell脚本学习篇一
查看>>
hdu(1596)
查看>>
[毕业生的商业软件开发之路]C#类型样式
查看>>