Delphi 中遍历 XML 文档的完整示例

简介:

  XML 文档的节点是标准的树形结构,可以通过递归或者回溯算法来遍历所有的节点。
    本例使用递归算法为例,制作了2个遍历 XML 文档的例子。
    第一个例子,给出一个 XML 节点,遍历所有子节点-不包括起始节点。
    第二个例子,给出一个 XML 节点,遍历所给的节点及其下属的所有子节点。
    以上2个示例均列举出了 XML 文档的标签属性和文本值,是比较完整的示例代码。

 
  1. <?xml version=”1.0″ encoding=”gb2312″?> 
  2. <root website=”http://www.why100000.com“> 
  3.   <channel id=”1″ tagname=”channel”> 
  4.     <topic id=”1-1″ tagname=”topic”>Windows频道</topic> 
  5.     <Url id=”1-2″ tagname=”Url”>www.why100000.com/_windows</Url> 
  6.   </channel> 
  7.   <channel id=”2″ tagname=”channel”> 
  8.     <topic id=”2-1″ tagname=”topic”>代码实验室</topic> 
  9.     <subWeb id=”2-2″ tagname=”subWeb”>http://lab.why100000.com</subWeb> 
  10.   </channel> 
  11.   <BBS id=”03″ tagname=”BBS”> 
  12.     <topic id=”03-1″ tagname=”topic”>电脑学习社区</topic> 
  13.     <subWeb id=”03-2″ tagname=”subWeb”>http://bbs.why100000.com</subWeb> 
  14.     <subBBS id=”03-3″> 
  15.       <subBBStopic id=”03-3-1″>菜鸟学院</subBBStopic> 
  16.       <subBBStopic id=”03-3-2″>问吧</subBBStopic> 
  17.       <subBBStopic id=”03-3-3″>学吧</subBBStopic> 
  18.       <subBBStopic id=”03-3-4″>回吧</subBBStopic> 
  19.       <subBBStopic id=”03-3-5″></subBBStopic> 
  20.       <subBBStopic></subBBStopic> 
  21.     </subBBS> 
  22.   </BBS> 
  23.   <AnatherTag note=”testTag-1″/> 
  24.   <AnatherTag/> 
  25. </root> 
  26. {———————————————————————-}  
  27. function TForm1.GetXmlTree1(nNode: IXMLNode): string;  
  28. var  
  29.   i, j: integer;  
  30. begin  
  31.   for i:=0 to nNode.ChildNodes.Count-1 do  
  32.   begin  
  33.     s :s + ‘<’ + nNode.ChildNodes.Nodes[i].NodeName;  
  34.     for j:=0 to nNode.ChildNodes[i].AttributeNodes.Count-1 do  
  35.     begin  
  36.       s :s + ‘ ‘+ nNode.ChildNodes[i].AttributeNodes[j].NodeName;  
  37.       s :s + ‘=”‘+ nNode.ChildNodes[i].AttributeNodes[j].NodeValue +’”‘;  
  38.     end;  
  39.     s :s + ‘>’;  
  40.     if nNode.ChildNodes.Nodes[i].IsTextElement then  
  41.       s :s + nNode.ChildNodes.Nodes[i].Text;  
  42.     if nNode.HasChildNodes and not nNode.ChildNodes.Nodes[i].IsTextElement then  
  43.     begin  
  44.       s :s +  #13 + #10;  
  45.       GetXmlTree1(nNode.ChildNodes.Nodes[i]);  
  46.     end;  
  47.     s :s + ‘</’+ nNode.ChildNodes.Nodes[i].NodeName +’>’ + #13 + #10;  
  48.   end;  
  49.   result :s;  
  50. end;  
  51. {———————————————————————-}  
  52. function TForm1.GetXmlTree2(nNode: IXMLNode): string;  
  53. var  
  54.   i, j: integer;  
  55. begin  
  56.   s :s + ‘<’ + nNode.NodeName;  
  57.   for j:=0 to nNode.AttributeNodes.Count-1 do  
  58.   begin  
  59.     s :s + ‘ ‘+ nNode.AttributeNodes[j].NodeName;  
  60.     s :s + ‘=”‘+ nNode.AttributeNodes[j].NodeValue +’”‘;  
  61.   end;  
  62.   s :s + ‘>’;  
  63.   if nNode.IsTextElement then  
  64.     s :s + nNode.Text  
  65.   else  
  66.   begin  
  67.     s :s + #13 + #10;  
  68.     if nNode.HasChildNodes then  
  69.       for i:=0 to nNode.ChildNodes.Count-1 do  
  70.       begin  
  71.         GetXmlTree2(nNode.ChildNodes.Nodes[i]);  
  72.       end;  
  73.   end;  
  74.   s :s + ‘</’ + nNode.NodeName + ‘>’+ #13 + #10;  
  75.   result :s;  
  76. end;  
  77. {———————————————————————-}  
  78. 调用:  
  79.  
  80. procedure TForm1.Button4Click(Sender: TObject);  
  81. var  
  82.   oXml: TXMLDocument;  
  83. begin  
  84.   oXml :TXMLDocument.Create(self);  
  85.   oXml.FileName := ‘_Treeview.xml’;  
  86.   oXml.Active:=true;  
  87.   s :=”;  
  88.   s :GetXmlTree1(oXml.ChildNodes.FindNode(’root’));  
  89.   Memo1.Lines.Add(s);  
  90.   oXml.Free;  
  91. end;  
  92.  
  93. procedure TForm1.Button5Click(Sender: TObject);  
  94. var  
  95.   oXml: TXMLDocument;  
  96. begin  
  97.   oXml :TXMLDocument.Create(self);  
  98.   oXml.FileName := ‘_Treeview.xml’;  
  99.   oXml.Active:=true;  
  100.   s :=”;  
  101.   s :GetXmlTree2(oXml.ChildNodes.FindNode(’root’));  
  102.   Memo1.Lines.Add(s);  
  103.   oXml.Free;  
  104. end;  

 









本文转自网眼51CTO博客,原文链接:http://blog.51cto.com/itwatch/286538,如需转载请自行联系原作者

相关文章
|
21天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
该文介绍了XML DOM遍历节点树的方法,通过循环移动遍历文档,以提取各元素值。示例代码展示了如何遍历指定节点的所有子节点,显示它们的名称和值,如书名、作者和年份。
|
4天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
该文讲述了如何遍历XML文档的节点树。通过示例代码展示如何循环访问XML元素,提取每个节点的名称和值。实例中,XML数据包含书籍信息,程序加载XML后,遍历根节点的所有子节点,依次显示它们的名称和内容。
|
1天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
该文介绍了如何遍历XML文档的节点树。通过示例代码展示了如何使用DOM解析XML,遍历并打印出`&lt;book&gt;`元素的所有子节点名称及其文本值,从而实现对XML数据的提取和处理。
|
9天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
该文介绍了XML DOM遍历节点树的概念,通过循环或移动在节点树中操作。示例展示了如何遍历XML文档,提取每个元素的名称和值。代码实例加载XML字符串到xmlDoc,获取根元素子节点,并输出它们的名称及文本值。
|
13天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
该文介绍了如何遍历XML文档的节点树。通过循环移动,可以访问并处理每个元素,例如提取值。示例代码展示了一个实例,它加载XML字符串到`xmlDoc`,然后遍历根元素的所有子节点,打印出节点名及文本值,如&quot;title: Everyday Italian&quot;、&quot;author: Giada De Laurentiis&quot;和&quot;year: 2005&quot;。
|
11天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
该文介绍了如何遍历XML文档的节点树。通过循环移动,可以访问每个元素,例如提取值。示例展示了遍历`&lt;book&gt;`的所有子节点,显示节点名和值,如`title: Everyday Italian`, `author: Giada De Laurentiis`, `year: 2005`。代码首先加载XML到`xmlDoc`,然后获取根元素子节点并输出其名称与文本值。
|
15天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
该文介绍了如何遍历XML文档的节点树。通过示例代码展示了如何使用DOM解析XML,遍历并打印出所有子节点的名称和值,以提取所需信息。实例中,XML数据包含书籍详情,程序逐个输出了这些细节。
|
4天前
|
XML Java 数据格式
java创建xml文件内容
java创建xml文件内容
9 0
|
4天前
|
XML Java 数据格式
java解析xml文件内容
java解析xml文件内容
12 0
|
2天前
|
XML 数据格式
XML配置Servlet文件,不使用注解配置路径的方法
XML配置Servlet文件,不使用注解配置路径的方法