zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    使用v-if刷新生命周期
    vue element 上传图片 文件
    vue中既能获取事件对象又能获取参数的方法
    element-ui跨行
    云原生体系下 Serverless 弹性探索与实践
    PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力
    谷粒商城笔记-环境配置(2)——文件上传、java参数验证、递归,分页、事务
    java 前端技术选型(Vue.js+Element.ui)
    java实现woff字体解析,逆向反爬
    自定义dom重现函数useResume
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/2079140.html
Copyright © 2011-2022 走看看