zoukankan      html  css  js  c++  java
  • Linux下TinyXml库使用方法及实例解析

      TinyXml库下载,我保存在自己的网盘中,可自行下载:

    提取码:e50y
     
    首先介绍一下TinyXml类

    XmlBase:整个TinyXML模型的基类;

    XmlAttribute:对应于XML中的元素的属性;

    XmlComment:对应于XML中的注释;

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

    XmlDocument:对应于XML的整个文档;

    XmlDocument:对应于XML的整个文档;

    XmlText:对应于XML的文字部分;

    XmlUnknown:对应于XML的未知部分;

    XmlHandler:定义了针对XML的一些操作;

     类之间的关系如下:

    需要注意的是:元素一定的节点,节点不一定是元素(TiXmlElement类)

    一.加载XML文件

    //加载XML文件
        TiXmlDocument doc;
        if(!doc.LoadFile("test.xml"))
        {
           qDebug()<<"加载XML文件失败";
           const char *errorStr = doc.ErrorDesc();
           qDebug()<<errorStr; //打印失败原因;
        }

    二.获取XML 的根节点

        //加载XML文件
        TiXmlDocument doc;
        if(!doc.LoadFile("test.xml"))
        {
           qDebug()<<"加载XML文件失败";
           const char *errorStr = doc.ErrorDesc();
           qDebug()<<errorStr; //打印失败原因;
        }
        else
        {
        //获取根节点元素
            TiXmlElement *root = doc.FirstChildElement();
        }

    三.常用方法

        TiXmlDocument doc;
        doc.LoadFile("test.xml");
        TiXmlElement *root = doc.FirstChildElement();           //获取根节点元素
        QString  ElementName = root->Value();                   //获取元素名
        bool Children = root->NoChildren();                     //判断该元素是否有子元素 返回true 有,false 没有
        TiXmlElement *child = root->FirstChildElement();        //获取root元素下的第一个子元素
        child = root->FirstChildElement("major");               //获取root元素的子元素指定元素名字(major)
        TiXmlElement *brother = child->NextSiblingElement();    //获取child元素的下一个兄弟元素
        brother = child->NextSiblingElement("specVersion");     //获取child元素的兄弟元素指定元素名字(specVersion)
        QString text = brother->GetText();                      //获取brother元素的值
        TiXmlAttribute *Attribute = brother->FirstAttribute();  //获取brother元素的第一个属性
        QString AttributeName = Attribute->Name();              //获取Attribute属性的名字
        QString AttributeValue = Attribute->Value();            //获取Attribute属性的值
        AttributeValue = brother->Attribute("AttributeName");   //获取brother的属性名为(AttributeName)的值
    
        TiXmlDocument *myDocument = new TiXmlDocument();                        //创建一个XML文件
        TiXmlDeclaration *pDeclaration=new TiXmlDeclaration("1.0","UTF-8","");  //创建xml文件头(<?xml version="1.0" encoding="UTF-8" ?>)
        myDocument->LinkEndChild(pDeclaration);                                 //加入将xml文件头加入文档中
        TiXmlElement *BUSINESS=new TiXmlElement("BUSINESS");                    //创建一个元素节点
        myDocument->LinkEndChild(BUSINESS);                                     //加入BUSINESS元素节点到文档中
        TiXmlElement *COUNTRY = new TiXmlElement("COUNTRY");                    //创建两个节点
        TiXmlElement *PLANET = new TiXmlElement("PLANET");
        BUSINESS->LinkEndChild(PLANET);                                         //将新建的节点加到BUSINESS下一级
        BUSINESS->LinkEndChild(COUNTRY);
        TiXmlText *PLANETtxt = new TiXmlText("one");                            //添加节点内的文本
        TiXmlText *COUNTRYtxt = new TiXmlText("china");
        COUNTRY->LinkEndChild(COUNTRYtxt);
        PLANET->LinkEndChild(PLANETtxt);
        myDocument->SaveFile("test.xml");                                       //保存xml

    下面介绍一个实例解析

    使用TinyXML库进行解析时,只需要将其中的6个文件拷贝到项目中就可以直接使用了,这六个文件是:tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp;

    XML文件如下---test.xml

     1 <School name="软件学院">
     2   <Class name = "C++">
     3     <Student name="tinyxml" number="123">
     4       <email>tinyxml@163.com</email>
     5       <address>中国</address>
     6     </Student>
     7     <Student name="jsoncpp" number="456">                                                     
     8       <email>jsoncpp@gmail.com</email>
     9       <address>美国</address>
    10     </Student>
    11 
    12   </Class>
    13 
    14 </School>
    ~                                                                                                                                                                                                                                                                                                                                                                                                               

    解析实例代码为:readxml.cpp

     1 #include<iostream>                                                                            
     2 #include"tinyxml.h"
     3 #include<string>
     4 
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     const char * xmlFile = "test.xml";
    10     TiXmlDocument doc;
    11     if(doc.LoadFile(xmlFile)){
    12         doc.Print();
    13     }else{
    14         cout << "can not parse xml school" << endl;
    15 
    16     }
    17     TiXmlElement* rootElement = doc.RootElement();
    18     TiXmlElement* classElement = rootElement->FirstChildElement();
    19     TiXmlElement* studentElement = classElement->FirstChildElement();
    20 
    21     for(; studentElement != NULL; studentElement = studentElement->NextSiblingElement()){
    22         TiXmlAttribute* attribute0fStudent = studentElement->FirstAttribute();
    23         for(; attribute0fStudent != NULL; attribute0fStudent = attribute0fStudent->Next()){
    24             cout << attribute0fStudent->Name() << " : " << attribute0fStudent->Value() << endl   ;
    25         }
    26         TiXmlElement* studentContactElement = studentElement->FirstChildElement();
    27         for(; studentContactElement != NULL; studentContactElement = studentContactElement->Ne   xtSiblingElement()){
    28         string contactType = studentContactElement->Value();
    29         string contactValue = studentContactElement->GetText();
    30         cout << contactType << " : " << contactValue << endl;
    31         }
    32     }
    33     return 0;
    34 }
    35 
    ~          

    如下为我工程下的文件

    csc105@csc105:~/workspace/configure-the-lower-computer/zmqcore/test_t/template/tinyxml$ ls
    readxml      test.xml     tinystr.h    tinyxmlerror.cpp  tinyxmlparser.cpp
    readxml.cpp  tinystr.cpp  tinyxml.cpp  tinyxml.h

    运行执行文件,解析结果为:

    csc105@csc105:~/workspace/configure-the-lower-computer/zmqcore/test_t/template/tinyxml$ ./readxml 
    <School name="软件学院">
        <Class name="C++">
            <Student name="tinyxml" number="123">
                <email>tinyxml@163.com</email>
                <address>中国</address>
            </Student>
            <Student name="jsoncpp" number="456">
                <email>jsoncpp@gmail.com</email>
                <address>美国</address>
            </Student>
        </Class>
    </School>
    name : tinyxml
    number : 123
    email : tinyxml@163.com
    address : 中国
    name : jsoncpp
    number : 456
    email : jsoncpp@gmail.com
    address : 美国

    到此,完成了XML 实例的解析

    最后感谢原博主:https://blog.csdn.net/qq_26374395/article/details/80171906



  • 相关阅读:
    JavaScript操作符instanceof揭秘
    Linux打开txt文件乱码的解决方法
    Working copy locked run svn cleanup not work
    poj 2299 UltraQuickSort 归并排序求解逆序对
    poj 2312 Battle City 优先队列+bfs 或 记忆化广搜
    poj2352 stars 树状数组
    poj 2286 The Rotation Game 迭代加深
    hdu 1800 Flying to the Mars
    poj 3038 Children of the Candy Corn bfs dfs
    hdu 1983 Kaitou Kid The Phantom Thief (2) DFS + BFS
  • 原文地址:https://www.cnblogs.com/tanshengjiang/p/15099282.html
Copyright © 2011-2022 走看看