• 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



  • 相关阅读:
    Centos7端口查看相关
    Redis线程安全问题
    利用redis 分布式锁 解决集群环境下多次定时任务执行
    分布式锁的几种实现方式~
    什么是 CI/CD? (持续集成/持续交付)
    Java JDBC 中获取 ResultSet 的大小
    BeetleX之XRPC使用详解
    事件驱动框架EventNext之线程容器
    BeetleX之快速构建Web多房间聊天室
    BeetleX之TCP服务应用详解
  • 原文地址:https://www.cnblogs.com/tanshengjiang/p/15099282.html
Copyright © 2020-2023  润新知