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 FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(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; //HasChildNodes: 判断是否包含子节点
procedure TForm1.Button1Click(Sender: TObject);
var
  node: IXMLNode;
  b: Boolean;
begin
{我们从例子中拿出一个节点, 譬如根节点下的第一个节点:
<人员 职务="科长" 备注="正局级">
  <姓名>张三</姓名>
  <性别>男</性别>
  <年龄>34</年龄>
</人员>
}
  {先用节点对象获取这个节点}
  node := XMLDocument1.DocumentElement.ChildNodes[];   {这个节点当然包含子节点, 并且是包含 3 个子节点}
  b := node.HasChildNodes;
  ShowMessage(BoolToStr(b));                    {-1; 也就是 True}
  ShowMessage(IntToStr(node.ChildNodes.Count)); {3}
  ShowMessage(node.NodeName);                  {人员} {再看其中的"姓名"节点:
<姓名>张三</姓名>
}
  {先用节点对象获取这个节点}
  node := XMLDocument1.DocumentElement.ChildNodes[].ChildNodes[];
  b := node.HasChildNodes;
  ShowMessage(BoolToStr(b));                    {-1; 也就是 True}
  ShowMessage(IntToStr(node.ChildNodes.Count)); {1}
  ShowMessage(node.NodeName);                  {姓名}
  {它里面只有文本"张三", 没有标签, 这时的节点才有 Text 属性}
  ShowMessage(node.Text); {张三}   {获取"张三"这个文本节点}
  node := XMLDocument1.DocumentElement.ChildNodes[].ChildNodes[].ChildNodes[];
  b := node.HasChildNodes;
  ShowMessage(BoolToStr(b));                    {0; 也就是 False 没有子节点了}
  ShowMessage(IntToStr(node.ChildNodes.Count)); {0; 子节点总数是 0}
  ShowMessage(node.NodeName);                  {#text; 说明它是一个文本节点}
  ShowMessage(node.NodeValue);                  {张三; 我们也可以取出它的值}   {文本节点的 NodeValue 属性等同于它上层节点的 Text 属性}
  ShowMessage(node.ParentNode.Text);            {张三}
end; //IsTextElement: 判断是否是否具有 Text 属性
procedure TForm1.Button2Click(Sender: TObject);
var
  node: IXMLNode;
  b: Boolean;
begin
{我们从例子中拿出一个节点, 譬如根节点下的第一个节点:
<人员 职务="科长" 备注="正局级">
  <姓名>张三</姓名>
  <性别>男</性别>
  <年龄>34</年龄>
</人员>
}
  {先用节点对象获取这个节点}
  node := XMLDocument1.DocumentElement.ChildNodes[];   {这个节点肯定没有 Text 属性}
  b := node.IsTextElement;
  ShowMessage(BoolToStr(b));                    {0; 也就是 False}
  ShowMessage(node.NodeName);                  {人员}   {"姓名"节点}
  node := XMLDocument1.DocumentElement.ChildNodes[].ChildNodes[];   {"姓名"节点有 Text 属性}
  b := node.IsTextElement;
  ShowMessage(BoolToStr(b));                    {-1; 也就是 True}
  ShowMessage(node.NodeName);                  {姓名}   {"张三"这个文本节点}
  node := XMLDocument1.DocumentElement.ChildNodes[].ChildNodes[].ChildNodes[];   {文本节点没有 Text 属性}
  b := node.IsTextElement;
  ShowMessage(BoolToStr(b));                    {0; 也就是 False}
  ShowMessage(node.NodeName);                  {#text}
end; end.

Delphi 中的 XMLDocument 类详解(9) - 关于 HasChildNodes 与 IsTextElement的更多相关文章

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

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  2. Php-SPL库中的迭代器类详解(转)

    SPL提供了多个迭代器类,分别提供了迭代访问.过滤数据.缓存结果.控制分页等功能.,因为php总是在不断壮大,我尽可能列出SPL中所有的迭代类.下面其中一些迭代器类是需要php5.4,另外一些如Sea ...

  3. MFC中CString.Format类详解

    在MFC程序中,使用CString来处理字符串是一个很不错的选择.CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串.CString的Format方法给我们进行字符串的 ...

  4. hadoop中典型Writable类详解

    本文地址:http://www.cnblogs.com/archimedes/p/hadoop-writable.html,转载请注明源地址. Hadoop将很多Writable类归入org.apac ...

  5. Spring框架spring-web模块中的RestTemplate类详解

    RestTemplate类是spring-web模块中进行HTTP访问的REST客户端核心类.RestTemplate请求使用阻塞式IO,适合低并发的应用场景. 1. RestTemplate类提供了 ...

  6. (14)javaWeb中的HttpServletResponse类详解

    如果希望了解请求和响应的详细内容,可以看我的“HTTP协议”系列文章 响应体的简单概述: a,响应报文结构: b,常见的状态码,返回服务器处理的结果: c,常见的响应头: HttpServletRes ...

  7. Delphi中的线程类 - TThread详解

    Delphi中的线程类 - TThread详解 2011年06月27日 星期一 20:28 Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本 ...

  8. JDK中Unsafe类详解

    Java中Unsafe类详解 在openjdk8下看Unsafe源码 浅析Java中的原子操作 Java并发编程之LockSupport http://hg.openjdk.java.net/jdk7 ...

  9. Java中dimension类详解

    Java中dimension类详解 https://blog.csdn.net/hrw1234567890/article/details/81217788

随机推荐

  1. 关联规则挖掘算法之Apriori算法

    Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集. 关于这个算法有一个非常有名的故事:"尿布和啤酒".故事是 ...

  2. Jenkins自动部署增加http状态码校验

    公司推进Jenkins自动化部署,因为web站点都是集群部署,部署需要测试指定服务器web服务是否成功启动,页面是否正常访问,经过不断baidu发现,python的request模块可以很好的解决这一 ...

  3. asp.net中 使用参数化mysqlparameter 保存数据时,总保存成一个汉字的解决方案。

    var param = new MySqlParameter("@" + columName, property.Value); param.DbType = DbType.Str ...

  4. 2D空间的OBB碰撞实现

    OBB全称Oriented bounding box,方向包围盒算法.其表现效果和Unity的BoxCollider并无二致.由于3D空间的OBB需要多考虑一些情况 这里仅关注2D空间下的OBB. 实 ...

  5. Atitit 3种类型的公司:运营驱动型;产品驱动型; 技术驱动型。

    Atitit  3种类型的公司:运营驱动型:产品驱动型: 技术驱动型. 领导驱动,产品驱动,运营驱动还是工程师驱动 3种类型的公司: 一种是运营驱动型: 一种是产品驱动型: 一种技术驱动型. 运营驱动 ...

  6. fiddler的编程文章

    https://www.cnblogs.com/trevan/p/9487223.html https://www.cnblogs.com/rufus-hua/p/5275980.html https ...

  7. MySQL主从复制作用和原理

    一.什么是主从复制?主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是准实时的业务数据库. 二.主从复制的作用1.做数据的热备,作为后备数据库,主数据库服务器故障后, ...

  8. RDLC 根据条件改变背景颜色-多个IIF

    =IIf(Fields!DATE_DIFF.Value < 5 ,"White",IIf(Fields!DATE_DIFF.Value >=5 AND Fields!D ...

  9. hdoj:2070

    Fibbonacci Number Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  10. 从一次线上故障思考Java问题定位思路

    问题出现:现网CPU飙高,Full GC告警 CGI 服务发布到现网后,现网机器出现了Full GC告警,同时CPU飙高99%.在优先恢复现网服务正常后,开始着手定位Full GC的问题.在现场只能够 ...