• c++ builder 中的 XMLDocument 类详解(13) 遍历XML文件


    //---------------------------------------------------------------------------
    
    #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 btn_1Click(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"
    #include <stdio.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    String ReadXml(_di_IXMLNode node)
    {
        _di_IXMLNodeList nodeList,attrList;
    
        String str,strName,strValue,result;
        int i;
        if(!node->HasChildNodes)
            return "";
        attrList=node->AttributeNodes;//根节点属性列表
        nodeList=node->ChildNodes;  //根节点下的子节点列表
    
        str="<"+node->NodeName;
    
        //先读取属性
        for(int i=0;i<attrList->Count-1;i++)
        {
            strName=attrList->Nodes[i]->Text;//结点名字
            strValue=attrList->Nodes[i]->Text; //结点值
            str=str+" "+strName+"="+AnsiQuotedStr(strValue,'\"');//AnsiQuotedStr定界符函数
        }
        str=str+">"+sLineBreak;//sLineBreak是常量
        //读取子结点
    
        for(int i=0;i<nodeList->Count;i++)
        {
            if(nodeList->Nodes[i]->IsTextElement)//如果他是文本结点则读它的数据
            {
                strName=nodeList->Nodes[i]->NodeValue;//结点值
                str=str+"<"+strName+">"+strValue+"</"+strName+">"+sLineBreak;
            }
            else if(nodeList->Nodes[i]->HasChildNodes)//如果是不是文本结点而且有子结点
            {
                str=str+ReadXml(nodeList->Nodes[i]);
                str=str+"</"+strName+">"+sLineBreak;
            }
        }
        str=str+"</"+node->NodeName+">";//封口
        return str;
    }
    
    
    
    //调用测试
    void __fastcall TForm1::btn_1Click(TObject *Sender)
    {
        String str_an,s1,s2;
        char str[50];
    
        XMLDocument1->LoadFromFile("D:\\code\\B_C_B\\XMLDocument\\test.xml");
    
        //读取文件
        s1=AnsiQuotedStr(XMLDocument1->Version,'"');//读出版本, 并添加双引号
        s2=AnsiQuotedStr(XMLDocument1->Encoding,'"');//读出字符集, 并添加双引号
    //    str=Format("<?xml version=%s encoding=%s?>",s1,s2,2);//
        sprintf(str,"<?xml version=%s encoding=%s?>",s1,s2);// 这就是头文件了
        str_an=AnsiString(str);
        str_an=str_an+sLineBreak+ReadXml(XMLDocument1->DocumentElement);
        ShowMessage(str_an);//返回
    }
    //---------------------------------------------------------------------------
    
    本人新博客网址为:http://www.hizds.com
    本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232
  • 相关阅读:
    转载: Ubuntu 在命令下,安装中文环境的方法。
    java复制文件范例代码
    Cesium-entiy闪烁范例
    转载:贝塞尔曲线计算公式
    转载: utm坐标和经纬度相互转换
    arcgis 地图如何转到supermap平台
    Linux查看修改文件句柄数
    转载:Linux目录文件的权限查看与修改
    欧拉系统-登陆 SSH 出现 Access Denied 错误
    关于 nodejs sequelize 事务批量拆分
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/2079140.html
Copyright © 2020-2023  润新知