精华内容
下载资源
问答
  • tinyxml解析xml文件

    2014-06-16 11:18:34
    vs2008写的例子 Unicode编码 实现把数据从数组结构体中写入xml,从xml文件中写入数组结构体。 内含一个说明文档里面有个简单的xml文件操作例子,和一个参考的网址链接。 用tinyxml类实现
  • 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文件

    千次阅读 2016-03-26 20:17:51
    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。 TinyXML是一个开源的解析XML的解析库,能够用

    下载地址 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>

    展开全文
  • 主要介绍了c++中如何用TINYXML解析XML文件,文中案例非常详细,帮助大家更好的了解和学习,感兴趣的朋友可以了解下
  • 软件介绍: TinyXml解析xml文件,本资源已经将TinyXml源码打包成Dll动态库,可直接调用,非常方便。TinyXml.dllTinyXml.libvcruntime140_app.dll
  • TinyXML介绍最近做一个负载均衡的小项目,需要解析xml配置文件,用到了TinyXML,感觉使用起来很容易,给出一个使用Tiny...这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵...

    TinyXML介绍

    最近做一个负载均衡的小项目,需要解析xml配置文件,用到了TinyXML,感觉使用起来很容易,给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完成。

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

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

    TinyXML类说明

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

    TiXmlBase:整个TinyXML模型的基类。

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

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

    TiXmlComment:对应于XML中的注释。

    TiXmlDeclaration:对应于XML中的申明部分,即。

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

    TiXmlElement:对应于XML的元素。

    TiXmlText:对应于XML的文字部分。

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

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

    下载和编译

    工作目录为:

    tinyxml/ //工作目录

    |-- include //头文件根目录

    |  |-- tinyxml //tinyxml头文件,包括tinystr.h tinyxml.h

    |-- src //cpp源码文件根目录

    |-- tinyxml //tinyxml源码文件夹,包括tinystr.cpp tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp

    |-- main.cpp //我们的主函数,调用tinyxml的示例代码

    |-- conf //我们示例中用的xml文件所在的文件夹

    |-- makefile //makefile,不用我们多说了吧,不懂请看我博客的makefile最佳实践

    简单的例子

    在conf目录下建立student.xml代码

    tinyxml@163.com

    中国

    jsoncpp@gmail.com

    美国

    想要使用tinyxml,只需要在头文件中包含即可

    读取整个xml文件并打印代码:

    void printSchoolXml() {

    using namespace std;

    TiXmlDocument doc;

    const char * xmlFile = "conf/school.xml";

    if (doc.LoadFile(xmlFile)) {

    doc.Print();

    } else {

    cout << "can not parse xml conf/school.xml" << endl;

    }

    }

    读取XML

    void readSchoolXml() {

    using namespace std;

    const char * xmlFile = "conf/school.xml";

    TiXmlDocument doc;

    if (doc.LoadFile(xmlFile)) {

    doc.Print();

    } else {

    cout << "can not parse xml conf/school.xml" << endl;

    return;

    }

    TiXmlElement* rootElement = doc.RootElement(); //School元素

    TiXmlElement* classElement = rootElement->FirstChildElement(); // Class元素

    TiXmlElement* studentElement = classElement->FirstChildElement(); //Students

    for (; studentElement != NULL; studentElement = studentElement->NextSiblingElement() ) {

    TiXmlAttribute* attributeOfStudent = studentElement->FirstAttribute(); //获得student的name属性

    for (;attributeOfStudent != NULL; attributeOfStudent = attributeOfStudent->Next() ) {

    cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << std::endl;

    }

    TiXmlElement* studentContactElement = studentElement->FirstChildElement();//获得student的第一个联系方式

    for (; studentContactElement != NULL; studentContactElement = studentContactElement->NextSiblingElement() ) {

    string contactType = studentContactElement->Value();

    string contactValue = studentContactElement->GetText();

    cout << contactType << " : " << contactValue << std::endl;

    }

    }

    }

    写入xml

    void writeSchoolXml() {

    using namespace std;

    const char * xmlFile = "conf/school-write.xml";

    TiXmlDocument doc;

    TiXmlDeclaration * decl = new TiXmlDeclaration("1.0", "", "");

    TiXmlElement * schoolElement = new TiXmlElement( "School" );

    TiXmlElement * classElement = new TiXmlElement( "Class" );

    classElement->SetAttribute("name", "C++");

    TiXmlElement * stu1Element = new TiXmlElement("Student");

    stu1Element->SetAttribute("name", "tinyxml");

    stu1Element->SetAttribute("number", "123");

    TiXmlElement * stu1EmailElement = new TiXmlElement("email");

    stu1EmailElement->LinkEndChild(new TiXmlText("tinyxml@163.com") );

    TiXmlElement * stu1AddressElement = new TiXmlElement("address");

    stu1AddressElement->LinkEndChild(new TiXmlText("中国"));

    stu1Element->LinkEndChild(stu1EmailElement);

    stu1Element->LinkEndChild(stu1AddressElement);

    TiXmlElement * stu2Element = new TiXmlElement("Student");

    stu2Element->SetAttribute("name", "jsoncpp");

    stu2Element->SetAttribute("number", "456");

    TiXmlElement * stu2EmailElement = new TiXmlElement("email");

    stu2EmailElement->LinkEndChild(new TiXmlText("jsoncpp@163.com"));

    TiXmlElement * stu2AddressElement = new TiXmlElement("address");

    stu2AddressElement->LinkEndChild(new TiXmlText("美国"));

    stu2Element->LinkEndChild(stu2EmailElement);

    stu2Element->LinkEndChild(stu2AddressElement);

    classElement->LinkEndChild(stu1Element);

    classElement->LinkEndChild(stu2Element);

    schoolElement->LinkEndChild(classElement);

    doc.LinkEndChild(decl);

    doc.LinkEndChild(schoolElement);

    doc.SaveFile(xmlFile);

    }

    XML删除操作

    删除某个节点, TiXmlNode是TiXmlElement、TiXmlComment、TiXmlText、TiXmlDeclaration、TiXmlUnknown、

    TiXmlDocument的基类

    TiXmlNode node;

    node.Clear();

    从A节点上移除子节点B

    TiXmlNode nodeA;

    nodeA. RemoveChild( TiXmlNode* removeThis );

    从元素A上移除名字为B的属性

    TiXmlAttribute attrA;

    attrA. RemoveAttribute( const char * name );

    XML修改操作

    查找内容为现需要将1234改成其他值

    TiXmlNode* lpnode = NULL;

    lpnode = tixml.RootElement()->IterateChildren("mfid",lpnode);

    TiXmlAttribute* tiattr = lpnode->ToElement()->FirstAttribute();

    //找到mfid节点,获取第一个属性值。注意,如果有多个属性值,需要判断哪个属性值是需要的

    tiattr->SetValue(mfid.c_str());

    替换一个节点

    TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis );

    以上就是c++中用TINYXML解析XML文件的详细内容,更多关于c++ tinyxml解析XML的资料请关注脚本之家其它相关文章!

    展开全文
  • 使用TinyXML解析XML文件

    2017-12-27 00:00:00
    这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。 下载TinyXML的网址:http://www.grinninglizard.com/tinyxml/使用TinyXML只需要将其中的6个文件拷贝到项目中就
  • Android中,在C++层使用TinyXML解析XML文件 在Android开发之向您的项目添加C/C++代码这篇文章中说了在Andoid中使用C++的有点,以及如何在Java与C++建立通信。有兴趣的读者朋友可以参考上一篇文章。这篇文章我们讲,...
  • 使用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...
  • C++ 使用 TinyXml 解析 XML 文件

    千次阅读 2017-12-02 19:00:01
    这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。 DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序...
  • 读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它...这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。 ...
  • Cocos2d-x] 使用TinyXml 解析XML文件   分类:  Cocos2d-X2013-06-01 17:02843人阅读评论(0)收藏举报 在做开发的时候,经常会使用XML的情况,在使用XML的时候,很多情况下会解析XML,那么我们来看一下在...
  • 在做开发的时候,经常会使用XML的情况,在使用XML的时候,很多情况下会解析XML,那么我们来看一下在cocos2d-x中如何使用TinnyXML来解析XML文件获取到我们需要的数据! 废话不多说,先看看例子XML的格式和...
  • Linux下C++使用TinyXML解析XML文件

    千次阅读 2012-03-19 19:22:40
    最近的由于项目需要解析XML文件,偷懒在网上找了一下开源的解析XML的源码学习了一下。发现一个上手很快,简单的开源解析XML的项目TinyXMLTinyXML可以解析UTF-8编码格式的DOM标准的XML文件。他不能够解析DTDs ...
  • 1.下载tinyXML,解压; 2.复制tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp到工程目录中; 3.再要调用tinyXML类的文件中#include...4.XML文件示例:  Persons>  

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 834
精华内容 333
关键字:

tinyxml解析xml文件