Delphi 中的 XMLDocument 类详解(10) - 判断节点类型: 支节点、叶节点、文本节点、空节点

简介:
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;
Button3: TButton;
Button4: TButton;
procedure  FormCreate(Sender: TObject);
procedure  Button1Click(Sender: TObject);
procedure  Button2Click(Sender: TObject);
procedure  Button3Click(Sender: TObject);
procedure  Button4Click(Sender: TObject);
private
{  Private declarations  }
public
{  Public declarations  }
end ;

var
Form1: TForm1;

implementation

{ $R *.dfm }

// 打开

procedure  TForm1.FormCreate(Sender: TObject);
begin
XMLDocument1.LoadFromFile(
' c:\temp\test.xml ' );
{ 必须用万一提供的 xml 测试文件, 才能有相同的返回值 }
end ;


// 什么是支节点与叶节点

{ 没有找到权威的参考, 我的理解是:
包含其他标签的节点是支节点; 不不包含其他标签的就是叶节点; 文本节点不算也节点.
}
{ 譬如根节点下的第一个节点:
<人员 职务="科长" 备注="正局级">

<姓名>张三</姓名>

<性别>男</性别>

<年龄>34</年龄>

</人员>

"人员" 节点是支节点;
"姓名"、"性别"、"年龄" 节点是叶节点;
叶节点中的部分是文本节点.
}


// 判断是否是支节点
procedure  TForm1.Button1Click(Sender: TObject);
var
node: IXMLNode;
begin
node :
=  XMLDocument1.DocumentElement.ChildNodes[ 0 ];  { 这是"人员"节点 }

if  node.HasChildNodes  and   not  node.IsTextElement  then
ShowMessage(
' 是支节点 ' );  { 是支节点 }
end ;


// 判断是否是叶节点
procedure  TForm1.Button2Click(Sender: TObject);
var
node: IXMLNode;
begin
node :
=  XMLDocument1.DocumentElement.ChildNodes[ 0 ].ChildNodes[ 0 ];  { 这是"姓名"节点 }

if  node.IsTextElement  then
ShowMessage(
' 是叶节点 ' );  { 是叶节点 }
end ;


// 判断是否是文本节点
procedure  TForm1.Button3Click(Sender: TObject);
var
node: IXMLNode;
begin
node :
=  XMLDocument1.DocumentElement.ChildNodes[ 0 ].ChildNodes[ 0 ].ChildNodes[ 0 ];
{ 这是"张三"那个文本节点 }

if  node.NodeName = ' #text '   then
ShowMessage(
' 是文本节点 ' );  { 是文本节点 }
end ;


// 判断是否是空节点
procedure  TForm1.Button4Click(Sender: TObject);
var
node: IXMLNode;
begin
node :
=  XMLDocument1.DocumentElement.ChildNodes[ 4 ];
{ 这是根节点下的第五个节点: "辅助人员", xml 中设为空 }

if   not  node.HasChildNodes  then
ShowMessage(
' 是空节点 ' );  { 是空节点 }
end ;

end .
复制代码



本文转自黄聪博客园博客,原文链接:http://www.cnblogs.com/huangcong/archive/2010/08/27/1809937.html,如需转载请自行联系原作者
相关文章
|
10月前
el-tree技巧之只能选中最后一层级的子节点以及查找树结构第一个无子节点的叶节点
el-tree技巧之只能选中最后一层级的子节点以及查找树结构第一个无子节点的叶节点
|
21小时前
|
XML JavaScript 前端开发
节点的属性
在XML DOM中,每个节点都是一个具有方法和属性的对象,可以通过JavaScript交互。关键的三个节点属性包括:nodeName、nodeValue和nodeType。nodeName属性表示节点的名称,只读且对不同类型的节点有不同的值,如元素节点与标签名相同,属性节点为属性名,文本节点为&quot;#text&quot;,文档节点为&quot;#document&quot;。nodeValue属性则定义了节点的值,元素节点的nodeValue未定义,文本节点为文本内容,属性节点为属性值。
|
4月前
leetcode-6134:找到离给定两个节点最近的节点
leetcode-6134:找到离给定两个节点最近的节点
15 0
|
5月前
|
TensorFlow 算法框架/工具
问题出在`TopKV2`节点的定义上
问题出在`TopKV2`节点的定义上
21 3
|
9月前
|
数据库
数据库——如何删除树形结构某一节点以及所有子节点
数据库——如何删除树形结构某一节点以及所有子节点
|
11月前
|
JavaScript 前端开发 算法
获取节点的方法
获取节点的方法
76 0
|
12月前
|
C语言
labview节点公式节点反馈节点表达节点属性节点
labview节点公式节点反馈节点表达节点属性节点
156 0
JavaWeb - 查询任意节点的所有子节点(包括孙子节点)
JavaWeb - 查询任意节点的所有子节点(包括孙子节点)
292 0
|
算法 Java
填充每个节点的下一个右侧节点指针(java算法)
填充每个节点的下一个右侧节点指针(java算法)
56 0
填充每个节点的下一个右侧节点指针(java算法)
给定一棵树,树中包含N个节点(编号1-n) ,和n-1 无向边
请你找出树的重心,并输出将重心删除,剩余各个连通块中点数的最大数值
130 0