XML 文档的节点是标准的树形结构,可以通过递归或者回溯算法来遍历所有的节点。
本例使用递归算法为例,制作了2个遍历 XML 文档的例子。
第一个例子,给出一个 XML 节点,遍历所有子节点-不包括起始节点。
第二个例子,给出一个 XML 节点,遍历所给的节点及其下属的所有子节点。
以上2个示例均列举出了 XML 文档的标签属性和文本值,是比较完整的示例代码。
<?xml version="1.0" encoding="gb2312"?>
<root website="http://www.why100000.com">
<channel id="1" tagname="channel">
<topic id="1-1" tagname="topic">Windows频道</topic>
<Url id="1-2" tagname="Url">www.why100000.com/_windows</Url>
</channel>
<channel id="2" tagname="channel">
<topic id="2-1" tagname="topic">代码实验室</topic>
<subWeb id="2-2" tagname="subWeb">http://lab.why100000.com</subWeb>
</channel>
<BBS id="03" tagname="BBS">
<topic id="03-1" tagname="topic">电脑学习社区</topic>
<subWeb id="03-2" tagname="subWeb">http://bbs.why100000.com</subWeb>
<subBBS id="03-3">
<subBBStopic id="03-3-1">菜鸟学院</subBBStopic>
<subBBStopic id="03-3-2">问吧</subBBStopic>
<subBBStopic id="03-3-3">学吧</subBBStopic>
<subBBStopic id="03-3-4">回吧</subBBStopic>
<subBBStopic id="03-3-5"></subBBStopic>
<subBBStopic></subBBStopic>
</subBBS>
</BBS>
<AnatherTag note="testTag-1"/>
<AnatherTag/>
</root>
{----------------------------------------------------------------------}
function TForm1.GetXmlTree1(nNode: IXMLNode): string;
var
i, j: integer;
begin
for i:=0 to nNode.ChildNodes.Count-1 do
begin
s := s + '<' + nNode.ChildNodes.Nodes[i].NodeName;
for j:=0 to nNode.ChildNodes[i].AttributeNodes.Count-1 do
begin
s := s + ' '+ nNode.ChildNodes[i].AttributeNodes[j].NodeName;
s := s + '="'+ nNode.ChildNodes[i].AttributeNodes[j].NodeValue +'"';
end;
s := s + '>';
if nNode.ChildNodes.Nodes[i].IsTextElement then
s := s + nNode.ChildNodes.Nodes[i].Text;
if nNode.HasChildNodes and not nNode.ChildNodes.Nodes[i].IsTextElement then
begin
s := s + #13 + #10;
GetXmlTree1(nNode.ChildNodes.Nodes[i]);
end;
s := s + '</'+ nNode.ChildNodes.Nodes[i].NodeName +'>' + #13 + #10;
end;
result := s;
end;
{----------------------------------------------------------------------}
function TForm1.GetXmlTree2(nNode: IXMLNode): string;
var
i, j: integer;
begin
s := s + '<' + nNode.NodeName;
for j:=0 to nNode.AttributeNodes.Count-1 do
begin
s := s + ' '+ nNode.AttributeNodes[j].NodeName;
s := s + '="'+ nNode.AttributeNodes[j].NodeValue +'"';
end;
s := s + '>';
if nNode.IsTextElement then
s := s + nNode.Text
else
begin
s := s + #13 + #10;
if nNode.HasChildNodes then
for i:=0 to nNode.ChildNodes.Count-1 do
begin
GetXmlTree2(nNode.ChildNodes.Nodes[i]);
end;
end;
s := s + '</' + nNode.NodeName + '>'+ #13 + #10;
result := s;
end;
{----------------------------------------------------------------------}
调用:
procedure TForm1.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;
procedure TForm1.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;
“十万个为什么”电脑学习网原创文档
转载请注明出处:http://www.why100000.com
分享到:
相关推荐
// 遍历XML文档的每个节点 for Node in DOMDoc.documentElement.childNodes do begin // 处理子节点 for ChildNode in Node.childNodes do begin // 根据节点类型插入换行和缩进 // ... end; end; // ...
在Delphi中,TXMLDocument组件是基于DOM的,它创建了一个XML文档对象,可以读取、修改或创建XML文档。通过这个组件,你可以通过节点(如元素、属性、文本等)遍历整个XML文档。 示例代码: ```delphi var ...
在“www.pudn.com.txt”文件中,可能包含了关于这个示例的说明或教程,而“XML”文件可能是一个XML示例文件,供用户在Delphi中加载并进行实际操作。 通过研究这个压缩包中的资源,开发者可以深入理解Delphi如何处理...
5. **遍历XML文档** TXMLDocument提供了遍历节点的方法,如`FirstNode`、`NextNode`、`ChildNodes`等。可以按照层级关系遍历整个XML结构。 6. **XML事件处理** Delphi中的TXMLDocument支持XML事件,如节点加载、...
描述中的"XML 控件,模仿网页的XML使用"表明这个压缩包可能包含了一种或多种Delphi组件,这些组件可以模拟网页中XML的使用方式,比如解析XML文档,呈现XML数据,或者执行XSLT转换来动态生成HTML。 在Delphi中,通常...
DOM 是将整个 XML 文档加载到内存中,形成一棵完整的对象树,方便开发者遍历和操作;SAX 则是事件驱动的解析方式,逐行读取 XML 文件,触发相应的事件回调。在 Delphi 中,DOM 方式的解析更常见,因为它提供了更直观...
描述中的“速度比用delphi读取并遍历XML快的不只几倍!”表明C#在处理XML时可能有更高的效率。这可能归功于.NET Framework的优化以及C#语言本身对内存管理的高效处理。 在给定的压缩包文件中,"ReadXML.sln"是...
2. 遍历XML节点:通过`ChildNodes`属性获取XML文档的根节点,然后遍历子节点。可以使用`NodeName`获取节点名称,`Text`获取文本内容,`Attributes`获取属性集合。 3. 解析XML数据:根据XML结构,提取所需的数据。...
一旦XML文档被加载,我们可以访问其根节点,并通过节点路径、属性名或索引来遍历和操作文档。例如,要获取某个元素的子节点或属性值,可以这样做: ```delphi var Node: IXMLNode; begin Node := XMLDoc....
比如,你可以通过遍历XML节点树来提取数据,或者将XML文档转化为`ISuperObject`,以便用JSON的方式来操作XML。 `tests`和`demos`目录通常包含了一些示例代码,用于演示如何使用这些解析库。在这些示例中,你可能会...
2. **遍历XML节点**:使用TXMLDocument的ChildNodes属性访问XML文档的根节点,然后通过循环遍历子节点,找到需要合并的部分。 3. **合并节点**:如果需要合并的XML文件有相同结构,可以将一个XML文件的某个节点复制...
在DEMO_delphi XML_xml的示例中,可能包含如何在Delphi程序中加载XML文件,查找特定元素,修改元素内容,以及保存更改的步骤。这样的实践可以帮助你更好地理解和掌握XML在实际编程中的应用。 总的来说,通过学习和...
本示例中的"XML.rar"压缩包提供了在Delphi中生成和读取XML文件的实例,这将有助于开发者更好地理解和应用XML技术。 首先,我们来看XML的基本结构。XML文档由元素(Element)组成,元素通过标签(Tag)定义,如`...
从这个项目中,我们可以学习到如何在Delphi中使用TXMLDocument类来解析XML文档,如何通过事件驱动的方式与用户界面交互,以及如何组织和管理Delphi项目的各个部分。此外,通过查看源代码(untContatos.pas),我们...
2. 遍历XML结构: - 访问根节点:通过TXMLDocument的DocumentElement属性获取XML文档的根元素。 - 遍历子节点:使用TXMLNode的ChildNodes属性可以访问所有子节点,通过循环遍历它们,例如`for Node in RootNode....
Native Xml 4.07是专为Delphi设计的一个高效、轻量级的XML解析库,它提供了完整的XML处理功能,包括解析、创建、修改和保存XML文档。这个版本的解析器在性能和稳定性上都有显著提升,尤其适合那些需要快速处理大量...
为了完整演示Delphi操作XML的流程,以下是一个简单的示例,该示例展示了如何读取一个XML文件,解析其中的学生信息,并将处理后的数据写入另一个XML文件。 ```delphi // 创建列表存储学生信息 List := TList.Create;...
4. 现在,你可以通过`XMLDoc.DocumentElement`访问XML文档的根节点,然后使用导航方法如`ChildNodes`, `Attributes`等来遍历和读取XML数据。 例如,如果你有一个如下的XML文件: ```xml <?xml version="1.0" ...
这两个组件是Delphi中处理XML的核心工具,它们基于MSXML库,允许我们解析和操作XML文档。 1. **XML读取**: - 使用`XMLDocument`创建一个新实例,然后通过`LoadFromFile`方法加载XML文件。例如: ```delphi var ...
首先,我们来详细了解在Delphi中如何创建XML文档。创建XML文档的基本步骤通常包括定义元素、属性以及它们之间的关系。Delphi提供了TXMLDocument组件,这是一个基于MSXML或XML4P的接口,用于处理XML文档。要创建一个...