精华内容
下载资源
问答
  • C++ 使用TinyXML解析XML文件,简单清晰,仅供参考。读取和设置xml配置文件是最常用的操作,TinyXML是一个开源的解析XML的C++解析库
  • tinyXMl解析XMl文件

    2017-04-24 22:48:51
    tinyxml解析XML文件
  • tinyXml解析XML文件

    千次阅读 2019-06-30 22:03:11
    TinyXML解析一个XML文档,并从该文档构建可读取、修改和保存的文档对象模型(DOM)。 XML代表“可扩展标记语言”,它允许您创建您自己的文档标记。HTML在标记方面做得很好用于浏览器的文档,XML允许您定义任何类型...

            TinyXML解析一个XML文档,并从该文档构建可读取、修改和保存的文档对象模型(DOM)。

            XML代表“可扩展标记语言”,它允许您创建您自己的文档标记。HTML在标记方面做得很好用于浏览器的文档,XML允许您定义任何类型的文档标记,例如描述组织者应用程序。XML是一种非常结构化和方便的格式。所有为存储应用程序数据而创建的随机文件格式都可以全部替换为XML。所有内容都有一个解析器。

            TinyXML设计为易于学习和快速学习。是两个.h和四个cpp文件。只需将这些添加到您的项目中就可以了。有一个示例文件xmltest.cpp可以让您开始。TinyXML是根据zlib许可证发布的,所以您可以在开放源码或商业代码中使用它。细节许可证在每个源文件的顶部。TinyXML试图成为一个灵活的解析器,但真正正确和兼容的XML输出。TinyXML应该编译任何合理的C++合规系统。它不依赖于异常或RTTI。它可以是使用或不使用STL支持编译。TinyXML完全支持UTF-8编码和前64K字符实体。

           TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

    TinyXml中的各个基本类型之间的关系,看看这个继承图:

           TinyXML的结构及节点说明:

          DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。

     在TinyXML中,根据XML的各种元素来定义了一些类:

    TiXmlBase:整个TinyXML模型的基类。

    TiXmlAttribute:对应于XML中的元素的属性。

    TiXmlNode:对应于DOM结构中的节点。

    TiXmlComment:对应于XML中的注释

    TiXmlDeclaration:对应于XML中的申明部分,即<?versiong="1.0" ?>。

    TiXmlDocument:对应于XML的整个文档。

    TiXmlElement:对应于XML的元素。

    TiXmlText:对应于XML的文字部分

    TiXmlUnknown:对应于XML的未知部分。 

    TiXmlHandler:定义了针对XML的一些操作。

    TinyXML是个解析库,主要由DOM模型类(TiXmlBase、TiXmlNode、TiXmlAttribute、TiXmlComment、TiXmlDeclaration、TiXmlElement、TiXmlText、TiXmlUnknown)和操作类(TiXmlHandler)构成。它由两个头文件(.h文件)和四个CPP文件(.cpp文件)构成,用的时候,只要将(tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp)导入工程就可以用它的东西了。如果需要,可以将它做成自己的DLL来调用。

    https://www.cnblogs.com/whlook/p/7117306.html

    被解析的文件为test.xml,文件内容如下:

    <?xml version="1.0" encoding="GBK" ?>
    <root>
        <host checked="true" station="1001">AAA</host>
        <client>
            <name>xiaoming</name>
            <id>200801</id>
        </client>
    </root>
    

    解析该文件的C++程序如下:

    #include <stdio.h>
    #include "../tinyxml/tinyxml.h"
    
    int main()
    {
    	// 解析xml
    	TiXmlDocument xml_doc;
    	if(!xml_doc.LoadFile("test.xml"))
    	{
    		return -1;
    	}
    	
    
    	// 根节点
    	TiXmlElement* xml_root = xml_doc.RootElement();
    	if (NULL == xml_root)
    	{
    		return -1;
    	}
    
    	// 获取元素的文本与属性
    	if(0)
    	{
    		TiXmlElement* xml_host = xml_root->FirstChildElement("host");
    		const char* text = xml_host->GetText();
    		const char* aChecked = xml_host->Attribute("checked");
    		const char* aStation = xml_host->Attribute("station");
    		printf("text:%s, check:%s, station:%s\n", text, aChecked, aStation);
    	}
    
    	//
    	if(1)
    	{
    		TiXmlElement* xml_client = xml_root->FirstChildElement("client");
    
    		TiXmlElement* xml_clientId = xml_client->FirstChildElement("id");
    		TiXmlElement* xml_clientName = xml_client->FirstChildElement("name");
    
    		const char* text_name = xml_clientName->GetText();
    		printf("name = %s\n", text_name);
    
    		// ...取得id和name的文本 ...
    	}
    
    	
    	return 0;
    }
    

    解析复杂XML例子:

    https://blog.csdn.net/wcy6340/article/details/9670201

     

    展开全文
  • tinyxml解析xml文件

    2018-03-30 10:22:57
    tinyxml用来解析xml文件的类,非常好用,编译没问题,c++的
  • 主要介绍了c++中如何用TINYXML解析XML文件,文中案例非常详细,帮助大家更好的了解和学习,感兴趣的朋友可以了解下
  • 软件介绍: TinyXml解析xml文件,本资源已经将TinyXml源码打包成Dll动态库,可直接调用,非常方便。TinyXml.dllTinyXml.libvcruntime140_app.dll
  • C++第三方Xml解析库,亲测好用,在这里免费提供给大家,将会配有使用此库读取Xml代码示例,大家可到博客中搜索“C++之tintxml2库读取Xml示例”。
  • Tinyxml解析xml文件

    千次阅读 2016-03-26 20:17:51
    下载地址 http://sourceforge.net/projects/tinyxml/ 官网有详细的文档以及API介绍 感觉像javaXML解析文件一样好用。 读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用...

    下载地址 http://sourceforge.net/projects/tinyxml/ 官网有详细的文档以及API介绍 感觉像javaXML解析文件一样好用。

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。

    TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

    DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。

     在TinyXML中,根据XML的各种元素来定义了一些类:

    TiXmlBase:整个TinyXML模型的基类。

    TiXmlAttribute:对应于XML中的元素的属性。

    TiXmlNode:对应于DOM结构中的节点。

    TiXmlComment:对应于XML中的注释

    TiXmlDeclaration:对应于XML中的申明部分,即<?versiong="1.0" ?>。

    TiXmlDocument:对应于XML的整个文档。

    TiXmlElement:对应于XML的元素。

    TiXmlText:对应于XML的文字部分

    TiXmlUnknown:对应于XML的未知部分。 

    TiXmlHandler:定义了针对XML的一些操作。

    TinyXML是个解析库,主要由DOM模型类(TiXmlBase、TiXmlNode、TiXmlAttribute、TiXmlComment、TiXmlDeclaration、TiXmlElement、TiXmlText、TiXmlUnknown)和操作类(TiXmlHandler)构成。它由两个头文件(.h文件)和四个CPP文件(.cpp文件)构成,用的时候,只要将(tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp)导入工程就可以用它的东西了。如果需要,可以将它做成自己的DLL来调用。

    后解压缩TinyXML后,将这六个文件添加到你的c++工程中,分别是tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp。


    如本示例中,只有 main.cpp 才是测试代码:



    编写代码时,只需要包含 tinyxml.h 头文件即可,但是,编译时却需要把所有.cpp 文件都加上

    示例代码如下:

    ?
    1
    2
    3
    4
    5
    #include <stdio.h>
    #include "tinyxml.h"
    #include <iostream>
    #include <cstring>
    using  namespace  std;
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    /*
      TiXmlDocument:文档类,它代表了整个xml文件
      TiXmlDeclaration:声明类,它表示文件的声明部分
      TiXmlComment:注释类,它表示文件的注释部分
      TiXmlElement:元素类,它是文件的主要部分,并且支持嵌套结构,一般使用这种结构来分类的存储信息,它可以包含属性类和文本类
      TiXmlAttribute/TiXmlAttributeSet:元素属性,它一般嵌套在元素中,用于记录此元素的一些属性
      TiXmlText:文本对象,它嵌套在某个元素内部
    */
    //创建xml文件
    int  writeXmlFile()
    {
      TiXmlDocument *writeDoc =  new  TiXmlDocument;  //xml文档指针
      
      //文档格式声明
      TiXmlDeclaration *decl =  new  TiXmlDeclaration( "1.0" "UTF-8" "yes" );
      writeDoc->LinkEndChild(decl);  //写入文档
    ?
    1
      int  n = 3;  //父节点个数
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
      TiXmlElement *RootElement =  new  TiXmlElement( "Info" ); //根元素
      RootElement->SetAttribute( "num" , n);  //属性
      writeDoc->LinkEndChild(RootElement);
      
      for ( int  i=0; i<n; i++) //n个父节点
      {
       TiXmlElement *StuElement =  new  TiXmlElement( "Stu" ); //Stu
       //设置属性
       StuElement->SetAttribute( "class" , "A" );
       if (2 == i)
       {
         StuElement->SetAttribute( "class" , "B" );
       }
       
       StuElement->SetAttribute( "id" ,i+1);
       StuElement->SetAttribute( "flag" , (i+1)*10);
       RootElement->LinkEndChild(StuElement); //父节点写入文档
      
       //姓名
       TiXmlElement *nameElement =  new  TiXmlElement( "name" );
       StuElement->LinkEndChild(nameElement);
    ?
    1
    2
    3
    4
    5
    6
       TiXmlText *nameContent =  new  TiXmlText( "mike" );
       nameElement->LinkEndChild(nameContent);
       
       //分数
       TiXmlElement *scoreElement =  new  TiXmlElement( "score" );
       StuElement->LinkEndChild(scoreElement);
    ?
    1
    2
    3
    4
    5
    6
       TiXmlText *scoreContent =  new  TiXmlText( "88" );
       scoreElement->LinkEndChild(scoreContent);
       
       //城市
       TiXmlElement *cityElement =  new  TiXmlElement( "city" );
       StuElement->LinkEndChild(cityElement);
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       TiXmlText *cityContent =  new  TiXmlText( "Shenzhen" );
       cityElement->LinkEndChild(cityContent);
       
      }
      
      writeDoc->SaveFile( "stu_info.xml" );
      delete  writeDoc;
      
      return  1;
    }
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //解析xml文件
    int  readXmlFile()
    {
      TiXmlDocument mydoc( "stu_info.xml" ); //xml文档对象
      bool  loadOk=mydoc.LoadFile(); //加载文档
      if (!loadOk)
      {
       cout<< "could not load the test file.Error:" <<mydoc.ErrorDesc()<<endl;
       exit (1);
      }
    ?
    1
    2
    3
    4
      TiXmlElement *RootElement=mydoc.RootElement();  //根元素, Info
      cout<<  "[root name]"  << RootElement->Value() << "\n" ;
      
      TiXmlElement *pEle=RootElement;
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
      //遍历该结点
      for (TiXmlElement *StuElement = pEle->FirstChildElement(); //第一个子元素
       StuElement != NULL;
       StuElement = StuElement->NextSiblingElement()) //下一个兄弟元素
      {
       // StuElement->Value() 节点名称
       cout<< StuElement->Value() << " " ;
       TiXmlAttribute *pAttr=StuElement->FirstAttribute(); //第一个属性
       
       while ( NULL != pAttr)  //输出所有属性
       {
        cout<<pAttr->Name()<< ":" <<pAttr->Value()<< " " ;
        pAttr=pAttr->Next();
       }
       cout<<endl;
       
       //输出子元素的值
       for (TiXmlElement *sonElement=StuElement->FirstChildElement();
       sonElement;
       sonElement=sonElement->NextSiblingElement())
       {
        cout<<sonElement->FirstChild()->Value()<<endl;
       }
      }
      
      return  1;
    }
    ?
    1
    2
    3
    4
    5
    6
    7
    int  main( int  argc,  char  *argv[])
    {
      
      writeXmlFile();
      printf ( "\nafter write\n" );
      
      readXmlFile();
    ?
    1
    2
      return  0;
    }

    编译运行结果如下:



    生成的xml文件内容如下:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <? xml  version = "1.0"  encoding = "UTF-8"  standalone = "yes"  ?>
     
    < Info  num = "3" >
     
         < Stu  class = "A"  id = "1"  flag = "10" >
     
             < name >mike</ name >
     
             < score >88</ score >
     
             < city >Shenzhen</ city >
     
         </ Stu >
     
         < Stu  class = "A"  id = "2"  flag = "20" >
     
             < name >mike</ name >
     
             < score >88</ score >
     
             < city >Shenzhen</ city >
     
         </ Stu >
     
         < Stu  class = "B"  id = "3"  flag = "30" >
     
             < name >mike</ name >
     
             < score >88</ score >
     
             < city >Shenzhen</ city >
     
         </ Stu >
     
    </ Info >

    展开全文
  • 利用tinyxml2解析XML读取数据 此工程为本人测试tinyxml2解析XML读取数据的效率进行的一个小测试程序
  • 实现tinyxml2解析和创建xml,包括解析和创建CDATA区段数据,元素多属性解析与创建
  • QT5.9.1 + MSVC2015 一个简单解析XML文件的例子,很简单;
  • 然后,我们开始解析xml吧。 (1)下载xml源码 网址:http://sourceforge.net/projects/tinyxml/ 网盘地址:链接:http://pan.baidu.com/s/1gfxnZTD 密码:xs1h 然后挑挑拣拣,剩下以下几个文件: (2)将...

    首先,该文档不包括源码编译,因为语言问题无法成功编译。

    然后,我们开始解析xml吧。

    (1)下载xml源码

    网址:http://sourceforge.net/projects/tinyxml/

    网盘地址:链接:http://pan.baidu.com/s/1gfxnZTD  密码:xs1h

    然后挑挑拣拣,剩下以下几个文件:

    (2)将上述几个文件加入到工程中,并如下图操作:

    (3)实例及代码实现

    http://blog.csdn.net/clever101/article/details/5334369

    https://www.cnblogs.com/hgwang/p/5833638.html

    https://www.cnblogs.com/walfud/archive/2012/01/09/2317144.html

    这里面已经很清晰了,需要注意的地方是在自己写的时候,要注意逻辑是否正确,即读取节点是否成功。


    展开全文
  • TinyXml解析xml文件,已将TinyXml源码打包成Dll动态库,使用更方便
  • 这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。 DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序...
  • 使用tinyxml解析xml文件

    2018-09-16 15:21:47
    下载地址 tinyxml下载链接https://download.csdn.net/download/u013230291/9920039 ...使用tinyxml需包含头文件#include “tinyxml.h” ... ///定义xml文件对象 oXmlFile.LoadFile(str_xml.c_str());///将x...

    TinyXML库的下载地址(http://download.csdn.net/detail/u013230291/9920039)
    使用tinyxml需包含头文件#include “tinyxml.h”
    实例
    xml数据如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <params>
        <result>
            <data>
                <dataUuid>id</dataUuid>
                <dataName>NAME</dataName>
                <dataBound>SHP</dataBound>
            </data>
            <data>
                <dataUuid>数据id</dataUuid>
                <dataName>数据名</dataName>
                <dataBound>数据边框</dataBound>
            </data>
            <data>
                <dataUuid>数据id</dataUuid>
                <dataName>数据名</dataName>
                <dataBound>数据边框</dataBound>
            </data>
            <data>
                <dataUuid><![CDATA[80522c3c-083b-4a0d-af23-956a8ca6af84]]></dataUuid>
                <dataName><![CDATA[E119D4_N28D3_20170429_ZY302_MUX_DOM]]></dataName>
                <dataBound><![CDATA[POLYGON((119.193 28.5701,119.7238 28.4729,119.6136 28.0084,119.0852 28.1055))]]></dataBound>
            </data>
        </result>
        <target>
            <targetBound><![CDATA[POLYGON((119.193 28.5701,119.7238 28.4729,119.6136 28.0084,119.0852 28.1055))]]></targetBound>
        </target>
    </params>
    

    解析代码:

    int XmlExp(const char* xmlpath)
    {
        TiXmlDocument docXml;///定义xml文件对象
        TiXmlElement* element = NULL;///定义节点对象指针
        TiXmlAttribute *attr = NULL;
        StruXmlInfo StruTemp;
        if (docXml.LoadFile(xmlpath) == true)///将xml文件读入内存
        {
            element = docXml.RootElement();///读取根节点
            TiXmlElement *ele_result = element->FirstChildElement();//获取根节点的子节点
            TiXmlElement *element2 = ele_result->FirstChildElement();///获取上一个节点的下一个子节点
            while (element2)
            {
                TiXmlElement *element3 = element2->FirstChildElement();
                for (int i = 0; i < 3; i++)
                {
                    const char* pContent = element3->GetText();///获取属性值
                    if (i == 0)
                    {
                        StruTemp.id = pContent;
                        printf("%s\n", pContent);
                    }
                    if (i == 1)
                    {
                        StruTemp.name = pContent;
                        printf("%s\n", pContent);
                    }
                    if (i == 2)
                    {
                        StruTemp.range = pContent;
                        printf("%s\n", pContent);
                    }
                    element3 = element3->NextSiblingElement();
                }
                VecXmlInfo.push_back(StruTemp);
                element2 = element2->NextSiblingElement();
                printf("%s\n", element2->Value());///获取标签名 
                if (element2->GetText() == "target")
                {
                    break;
                }
            }
    
    
            /*while (element3)
            {
                const char* pContent = element3->GetText();
                StruTemp.id = pContent;
    
                printf("%s\n", pContent);
                element3 = element3->NextSiblingElement(); ///获取同级节点的下一个节点的对象指针   
            }*/
    
    
        }
        return 0;
    }
    

    代码说明:
    element2->Value():获取标签名
    element3->NextSiblingElement():获取同级节点的下一个节点的对象指针
    element3->GetText():获取属性值

    展开全文
  • TinyXML-2 TinyXML-2是一个简单,小型,高效的C ++ XML解析器,可以轻松地集成到其他程序中。...简而言之,TinyXML-2解析XML文档,并以此为基础构建可读取,修改和保存的文档对象模型(DOM)。 XML代表“ eXten
  • 下载地址:https://sourceforge.net/projects/tinyxml/ ... 1.介绍  读取和设置xml配置文件是最常用的操作,TinyXML是一个开源的解析XML的C++解析库,能够在...这个解析库的模型通过解析XML文件,然后在内存中生成...
  • 在c++ 中使用tinyxml解析xml文件

    千次阅读 2019-05-20 18:33:17
    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它...这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。 ...
  • TinyXML2是simple、small、efficient开源的C++ XML文件解析库,可以很方便的应用到现有的项目之中。非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作。
  • tinyxml解析

    2015-12-24 17:09:55
    用于c++中xml文件解析操作,方便开发人员开发
  • tinyxml2之解析xml文件

    千次阅读 2018-06-04 22:49:23
     tinyXML2是一个开源的解析XML的C++库,用于c++项目里面解析xml文件使用。下载地址:https://github.com/leethomason/tinyxml2 ,使用git直接将源码下载下来。使用方法:将下载的源码包里面的tinyxml2.h,tinyxml2....
  • xml快速入门(tinyxml解析

    千次阅读 2017-09-11 22:21:18
    xml是一种可扩展标记语言,用于传输和存储数据。 语法 1.xml必须有根节点  &lt;root&gt;  &lt;child&gt;child&lt;/child&gt;  &lt;/root&gt; 2xml节点必须有始有终(有关...
  • TinyXML解析

    2012-09-21 11:37:25
    很简单的TinyXML解析代码,带有.sln。VS2005编译通过,生成IP设备配置文件
  • TinyXML解析xml文档

    2008-12-29 11:15:01
    TinyXML是目前非常流行的一款基于DOM模型的XML解析器,简单易用且小巧玲珑,非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作,尤其适用于游戏开发,在Nebula2,CEGUI等开源项目中都有使用。
  • Tinyxml文件解析经典例子

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,088
精华内容 2,835
关键字:

tinyxml解析xml文件