• c++ builder 中的 XMLDocument 类详解(9) 关于 HasChildNodes 与 IsTextElement


    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <msxmldom.hpp>
    #include <XMLDoc.hpp>
    #include <xmldom.hpp>
    #include <XMLIntf.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// IDE-managed Components
        TButton *btn_1;
        TButton *btn_2;
        TXMLDocument *XMLDocument1;
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall btn_1Click(TObject *Sender);
        void __fastcall btn_2Click(TObject *Sender);
    private:	// User declarations
    public:		// User declarations
        __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
        XMLDocument1->LoadFromFile("D:\\code\\B_C_B\\XMLDocument\\test.xml");
    }
    //---------------------------------------------------------------------------
    
    
    void __fastcall TForm1::btn_1Click(TObject *Sender)
    {
        _di_IXMLNode node;
        bool b;
    
    /*  我们从例子中拿出一个节点, 譬如根节点下的第一个节点:
        <人员 职务="科长" 备注="正局级">
            <姓名>张三</姓名>
            <性别>男</性别>
            <年龄>34</年龄>
        </人员>
        */
        //先获取这个结点
        node=XMLDocument1->DocumentElement->ChildNodes->Nodes[0];
    
        //这个结点当然包含有子结点,并且有3个子结点
        b=node->HasChildNodes;
        ShowMessage(BoolToStr(b)); //返回-1也就是true
        ShowMessage(IntToStr(node->ChildNodes->Count));//3
        ShowMessage(node->NodeName);//人员
    
        /*再看其中的姓名结点
        <姓名>张三</姓名>
        */
        node=XMLDocument1->DocumentElement->ChildNodes->Nodes[0]->ChildNodes->Nodes[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->Nodes[0]->ChildNodes->Nodes[0]->ChildNodes->Nodes[0];
        b=node->HasChildNodes;
        ShowMessage(BoolToStr(b));//0也就是false,没有子节点了
        ShowMessage(IntToStr(node->ChildNodes->Count));//0
        ShowMessage(node->NodeName);//#text说明它是一个文本结点
        ShowMessage(node->NodeValue);//张三,我们也可以取出他的值
    
        //文本结点的nodevalue属性等同于它上层节点的text属性
        ShowMessage(node->ParentNode->Text);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::btn_2Click(TObject *Sender)
    {
        //isTextElement。判断是否具有text属性
    
        _di_IXMLNode node;
        bool b;
        /* 我们从例子中拿出一个节点, 譬如根节点下的第一个节点:
    
        <人员 职务="科长" 备注="正局级">
            <姓名>张三</姓名>
            <性别>男</性别>
            <年龄>34</年龄>
        </人员>
        */
         node=XMLDocument1->DocumentElement->ChildNodes->Nodes[0];
    
         //这个结点肯定没有text属性
         b=node->IsTextElement;
         ShowMessage(BoolToStr(b));    //0.也就是没有text属性
         ShowMessage(node->NodeName);//人员
    
         //姓名结点
         node=XMLDocument1->DocumentElement->ChildNodes->Nodes[0]->ChildNodes->Nodes[0];
         //姓名结点有text属性
         b=node->IsTextElement;
         ShowMessage(BoolToStr(b));    //-1.也就是有text属性
         ShowMessage(node->NodeName);//姓名
    
         //张三结点
         node=XMLDocument1->DocumentElement->ChildNodes->Nodes[0]->ChildNodes->Nodes[0]->ChildNodes->Nodes[0];
    
         //文本结点没有Text属性
         b=node->IsTextElement;
         ShowMessage(BoolToStr(b));    //0.也就是没有text属性
         ShowMessage(node->NodeName);//#text
    
    
    }
    //---------------------------------------------------------------------------
    
    本人新博客网址为:http://www.hizds.com
    本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232
  • 相关阅读:
    读取文本文件中的中文打印到Eclipse控制台为何显示问号
    使用StringUtils需要引用的依賴
    Ajax跨域访问XML数据的另一种方式——使用YQL查询语句
    AngularJS快速入门指南15:API
    国外社交网站获取分享数量APIs
    AngularJS快速入门指南14:数据验证
    AngularJS快速入门指南13:表单
    AngularJS快速入门指南12:模块
    AngularJS快速入门指南11:事件
    AngularJS快速入门指南10:DOM节点
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/2075788.html
Copyright © 2020-2023  润新知