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

2016-08-22 10:19:41来源:http://itwatch.blog.51cto.com/1338142/286538作者:网眼人点击


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


<?xmlversion=”1.0″encoding=”gb2312″?><rootwebsite=”http://www.why100000.com“><channelid=”1″tagname=”channel”><topicid=”1-1″tagname=”topic”>Windows频道</topic><Urlid=”1-2″tagname=”Url”>www.why100000.com/_windows</Url></channel><channelid=”2″tagname=”channel”><topicid=”2-1″tagname=”topic”>代码实验室</topic><subWebid=”2-2″tagname=”subWeb”>http://lab.why100000.com</subWeb></channel><BBSid=”03″tagname=”BBS”><topicid=”03-1″tagname=”topic”>电脑学习社区</topic><subWebid=”03-2″tagname=”subWeb”>http://bbs.why100000.com</subWeb><subBBSid=”03-3″><subBBStopicid=”03-3-1″>菜鸟学院</subBBStopic><subBBStopicid=”03-3-2″>问吧</subBBStopic><subBBStopicid=”03-3-3″>学吧</subBBStopic><subBBStopicid=”03-3-4″>回吧</subBBStopic><subBBStopicid=”03-3-5″></subBBStopic><subBBStopic></subBBStopic></subBBS></BBS><AnatherTagnote=”testTag-1″/><AnatherTag/></root>{———————————————————————-} functionTForm1.GetXmlTree1(nNode:IXMLNode):string; var i,j:integer; begin fori:=0tonNode.ChildNodes.Count-1do begin s:=s+‘<’+nNode.ChildNodes.Nodes[i].NodeName; forj:=0tonNode.ChildNodes[i].AttributeNodes.Count-1do begin s:=s+‘‘+nNode.ChildNodes[i].AttributeNodes[j].NodeName; s:=s+‘=”‘+nNode.ChildNodes[i].AttributeNodes[j].NodeValue+’”‘; end; s:=s+‘>’; ifnNode.ChildNodes.Nodes[i].IsTextElementthen s:=s+nNode.ChildNodes.Nodes[i].Text; ifnNode.HasChildNodesandnotnNode.ChildNodes.Nodes[i].IsTextElementthen begin s:=s+#13+#10; GetXmlTree1(nNode.ChildNodes.Nodes[i]); end; s:=s+‘</’+nNode.ChildNodes.Nodes[i].NodeName+’>’+#13+#10; end; result:=s; end; {———————————————————————-} functionTForm1.GetXmlTree2(nNode:IXMLNode):string; var i,j:integer; begin s:=s+‘<’+nNode.NodeName; forj:=0tonNode.AttributeNodes.Count-1do begin s:=s+‘‘+nNode.AttributeNodes[j].NodeName; s:=s+‘=”‘+nNode.AttributeNodes[j].NodeValue+’”‘; end; s:=s+‘>’; ifnNode.IsTextElementthen s:=s+nNode.Text else begin s:=s+#13+#10; ifnNode.HasChildNodesthen fori:=0tonNode.ChildNodes.Count-1do begin GetXmlTree2(nNode.ChildNodes.Nodes[i]); end; end; s:=s+‘</’+nNode.NodeName+‘>’+#13+#10; result:=s; end; {———————————————————————-} 调用: procedureTForm1.Button4Click(Sender:TObject); var oXml:TXMLDocument; begin oXml:=TXMLDocument.Create(self); oXml.FileName:=‘_Treeview.xml’; oXml.Active:=true; s:=”; s:=GetXmlTree1(oXml.ChildNodes.FindNode(’root’)); Memo1.Lines.Add(s); oXml.Free; end; procedureTForm1.Button5Click(Sender:TObject); var oXml:TXMLDocument; begin oXml:=TXMLDocument.Create(self); oXml.FileName:=‘_Treeview.xml’; oXml.Active:=true; s:=”; s:=GetXmlTree2(oXml.ChildNodes.FindNode(’root’)); Memo1.Lines.Add(s); oXml.Free; end;

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台