• 黄聪:Delphi 中的 XMLDocument 类详解(9) 关于 HasChildNodes 与 IsTextElement


    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[0];

    {这个节点当然包含子节点, 并且是包含 3 个子节点}
    b :
    = node.HasChildNodes;
    ShowMessage(BoolToStr(b));
    {-1; 也就是 True}
    ShowMessage(IntToStr(node.ChildNodes.Count));
    {3}
    ShowMessage(node.NodeName);
    {人员}


    {再看其中的"姓名"节点:
    <姓名>张三</姓名>

    }
    {先用节点对象获取这个节点}
    node :
    = XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes[0];
    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[0].ChildNodes[0].ChildNodes[0];
    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[0];

    {这个节点肯定没有 Text 属性}
    b :
    = node.IsTextElement;
    ShowMessage(BoolToStr(b));
    {0; 也就是 False}
    ShowMessage(node.NodeName);
    {人员}


    {"姓名"节点}
    node :
    = XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes[0];

    {"姓名"节点有 Text 属性}
    b :
    = node.IsTextElement;
    ShowMessage(BoolToStr(b));
    {-1; 也就是 True}
    ShowMessage(node.NodeName);
    {姓名}

    {"张三"这个文本节点}
    node :
    = XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes[0].ChildNodes[0];

    {文本节点没有 Text 属性}
    b :
    = node.IsTextElement;
    ShowMessage(BoolToStr(b));
    {0; 也就是 False}
    ShowMessage(node.NodeName);
    {#text}
    end;

    end.

    ---------------------------------------------------------------------------------------------------------------------------------------

    出处:http://www.cnblogs.com/del/archive/2008/01/03/1024708.html

  • 相关阅读:
    JVM学习笔记-方法区(Method Area)
    JVM学习笔记-类型信息(Type Information)
    JVM学习笔记-常量池(Constant Pool)
    JVM学习笔记-字段信息(Field Information)
    hive schematool -initSchema -dbType mysql 报错
    flink error: Exception in thread "main" java.lang.NoClassDefFoundError
    python error: TypeError: cannot serialize '_io.TextIOWrapper' object
    multiprocessing.Pool 捕获error
    sysdig 安装与使用(转载)
    sonatype nexus简介(转)
  • 原文地址:https://www.cnblogs.com/huangcong/p/1809931.html
Copyright © 2020-2023  润新知