tinyxml的使用以及示例_aa838260772的博客-程序员秘密

技术标签: C++  

1.下载xml源代码:github上面 clone

地址:https://github.com/aughey/tinyxml/

2.下来以后自己make一下主要的就几个头文件和源文件

3.测试案例

4.编译成静态库: ar rv libxml.a  *.o

5. 测试案例运行: g++ -o test test.o -L./ -lxml

6.问题:对于main程序,先编译成目标文件,最后链接成库,不能一步做完

主要过程


#include <iostream>
#include <string>
#include "tinyxml.h"
#include "myxml.h"
#include <assert.h>
using namespace std;

int main(int argc, const char *argv[])
{
    string xml_str = "<Class name=\"计算机软件班\">  \
                      <Students>           \
                      <student name=\"张三\" studentNo=\"13031001\" sex=\"男\" age=\"22\">  \
                      <phone>88208888</phone>     \
                      <address>西安市太白南路二号</address>  \
                      </student>    \
                      <student name=\"李四\" studentNo=\"13031002\" sex=\"男\" age=\"20\">  \
                      <phone>88206666</phone>   \
                      <address>广东省深圳市</address>  \
                      </student>   \
                      </Students>  \
                      </Class>";

    string msg_xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>       \
                      <returnsms>   \
                      <returnstatus>Success</returnstatus>      \
                      <message>操作成功</message>     \
                      <remainpoint>3</remainpoint>            \
                      <taskID>1412291000299729</taskID>       \
                      <successCounts>1</successCounts>       \
                      <returnstatus>Success</returnstatus>      \
                      <message>操作成功</message>     \
                      <remainpoint>1</remainpoint>            \
                      <taskID>111191000299729</taskID>       \
                      <successCounts>1</successCounts>       \
                      </returnsms>";

    string rsp_msg = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>   \
                      <returnsms>   \
                      <statusbox>     \
                      <mobile>13045877691</mobile>    \
                      <taskid>1412261437053252</taskid>   \
                      <status>10</status>     \
                      <receivetime>2014-12-26 14:37:08</receivetime>      \
                      <errorcode>DELIVRD</errorcode>      \
                      <extno></extno>     \
                      </statusbox>      \
                      <statusbox>     \
                      <mobile>13045877691</mobile>      \
                      <taskid>1412291000299729</taskid>   \
                      <status>10</status>     \
                      <receivetime>2014-12-29 10:00:32</receivetime>        \
                      <errorcode>DELIVRD</errorcode>        \
                      <extno></extno>       \
                      </statusbox>        \
                      </returnsms>";

        mylib::MyXml my_xml;
        mylib::MyXml::MapMap map_value;
   /*     my_xml.MultiParse(rsp_msg, map_value);
        cout << map_value[0]["mobile"] << endl;
        cout << map_value[1]["mobile"] << endl;
        cout << map_value[0]["taskid"] << " " << map_value[1]["taskid"] << endl;
*/
        my_xml.SignalParse(msg_xml, map_value);
        cout << "taskid:" << map_value[0]["taskID"] << endl;
/*
    TiXmlDocument* myDocument = new TiXmlDocument();
    //myDocument->LoadFile("Students.xml");

//解析多个

    myDocument->Parse(rsp_msg.c_str());
    TiXmlNode* pXmlFirst = myDocument->FirstChild();
    TiXmlDeclaration* pXmlDec = pXmlFirst->ToDeclaration();//获取头部声明
    cout << "szVer:" << pXmlDec->Version()
        << " is absolute:" << pXmlDec->Standalone()
        << " code type:" << pXmlDec->Encoding()
        << endl;

    myDocument->Print();
    TiXmlElement* rootElement = myDocument->RootElement();//returnsms
   // TiXmlElement* everyEle = rootElement->FirstChildElement();
    TiXmlElement* pEle = NULL;
    for(pEle = rootElement->FirstChildElement(); pEle; pEle = pEle->NextSiblingElement())
    {
     //   cout << "1" << endl;

       // TiXmlElement* pEle_child = pEle->FirstChildElement();
       // cout << "1:" << pEle_child->GetText() << endl;

      //   pEle_child = pEle_child->NextSiblingElement();
      //  cout << "2:" << pEle_child->GetText() << endl;

    TiXmlElement* pEle_child;
    //cout << pEle->FirstAttribute()->Name() << ":";
    string rsp;
    pEle->QueryValueAttribute("mobile", &rsp);
    cout << "QueryValueAttribute:" <<  rsp << endl;

   for(pEle_child = pEle->FirstChildElement(); pEle_child; pEle_child = pEle_child->NextSiblingElement())
    {
        cout << pEle_child->Value() << ":"<< endl;

          string value;
          if(pEle_child->GetText())
          {
              sp = pEle_child->GetText();
          }
          cout << value << endl;
    }

      // cout << pEle->GetText() << endl;
    }

    //ReadXmlText
    //解析单个msg_xml

    myDocument->Parse(msg_xml.c_str());
    TiXmlNode* pXmlFirst = myDocument->FirstChild();
    TiXmlDeclaration* pXmlDec = pXmlFirst->ToDeclaration();//获取头部声明
    cout << "szVer:" << pXmlDec->Version()
        << " is absolute:" << pXmlDec->Standalone()
        << " code type:" << pXmlDec->Encoding()
        << endl;
    TiXmlElement* rootElement = myDocument->RootElement();

  //  TiXmlNode* pParent = rootElement->Parent();
  //  TiXmlNode* pChild = rootElement->FirstChild();

    TiXmlElement* pEle = NULL;
    for(pEle = rootElement->FirstChildElement(); pEle; pEle = pEle->NextSiblingElement())
    {
        cout << "\t";
        cout << pEle->GetText() << endl;

    }
*/

    //解析xml_str
    /* myDocument->Parse(xml_str.c_str());
       TiXmlElement* rootElement = myDocument->RootElement();  //Class
       TiXmlElement* studentsElement = rootElement->FirstChildElement();  //Students
       TiXmlElement* studentElement = studentsElement->FirstChildElement();  //Students
       while ( studentElement) {
       TiXmlAttribute* attributeOfStudent = studentElement->FirstAttribute();  //获得student的name属性
       while ( attributeOfStudent ) {
       std::cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << std::endl;
       attributeOfStudent = attributeOfStudent->Next();
       }

       TiXmlElement* phoneElement = studentElement->FirstChildElement();//获得student的phone元素
       std::cout << "phone" << " : " << phoneElement->GetText() << std::endl;

       TiXmlElement* addressElement = phoneElement->NextSiblingElement();
       std::cout << "address" << " : " << addressElement->GetText() << std::endl;

       studentElement = studentElement->NextSiblingElement();
       }
       */

  //     delete myDocument;
    return 0;
}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/aa838260772/article/details/42243695

智能推荐

虚幻4蓝图快速入门(三)_德智的博客-程序员秘密

数学表达式节点概述要想创建一个数学表达式节点,请右击图表并从关联菜单中选择 Add Math Expression(添加数学表达式)... 。 数学表达式节点就像一个合并的图表。它是一个独立的节点,您可以双击它来打开构成其功能的子图表。 最初,该名称/表达式是空的。任何时候,当您重命名该节点时,都将会解析新表达式并生成新的子图表。变量变量命名非常灵活,但是记住以下几点非常重要:变量名称本身可以包含...

IP实验3:静态路由和动态路由配置_weixin_44946345的博客-程序员秘密_静态路由改为动态路由

IP实验3:静态路由和动态路由配置文章目录IP实验3:静态路由和动态路由配置静态路由实验环境1.按照实验原理图配置好网络拓扑结构。2.设置PC和路由的IP和接口并设置环回口用于测试。路由接口及环回口设置:静态路由配置:3.测试连通性并分析动态路由实验环境:实验步骤配置动态路由结果测试分析实验总结静态路由实验环境1.按照实验原理图配置好网络拓扑结构。2.设置PC和路由的IP和接口并设置环回口用于测试。路由接口及环回口设置:R1:&lt;Huawei&gt;sy [Huawei]sy

beforeEach全局钩子管理用户访问权限!_luck_lin的博客-程序员秘密

 创建路由:export default new Router({ routes: [{ path: '/', component: { template: '&amp;lt;div&amp;gt;&amp;lt;div&amp;gt;公共页面&amp;lt;/div&amp;gt;&amp;lt;router-link to=&quot;/admin1&quot;&amp;gt;取admin1&amp;lt;/router-link&amp;gt;&amp;lt;rout..

Arch Linux安装_MrX_OvO的博客-程序员秘密

Arch Linux安装一、安装前做的事1. 下载.iso镜像文件1.1方式一1.2方式二1.3方式三(HTTP直接下载 国内仓库镜像下载)2. 验证签名(PGP验证)3. 制作U盘启动器3.1Windows下3.2Linux下4. 启动到Live环境5. 设置控制台键盘布局6. 验证引导模式7. 联网8. 更新系统时间9. 建立硬盘分区10. 格式化分区11. 挂载分区二、安装系统1. 选择国内镜像源2. 安装必须的软件包3. 配置系统3.1 Fstab3.2 Chroot3.3 时区3.4 本地化3.5

html 鼠标中键事件,Javascript事件模拟(鼠标事件、键盘事件)_半木zxy的博客-程序员秘密

在javascript编程中,事件是用来描述网页中某一特定有趣时刻的,众所周知事件通常是在由用户和浏览器进行交互时触发,其实不然,通过Javascript可以在任何时间触发特定的事件,并且这些事件与浏览器创建的事件是相同的。会有适当的事件冒泡,并且浏览器会执行分配的事件处理程序。这种能力在测试web应用程序的时候,是非常有用的,在DOM 3级规范中提供了方法来模拟特定的事件,IE9 chrome ...

cvc-complex-type.3.2.2: 元素 ‘ref‘ 中不允许出现属性 ‘local‘。_Oa_aY的博客-程序员秘密

&lt;property name="triggers"&gt; &lt;list&gt; &lt;ref local="aaaTrigger" /&gt; &lt;ref local="bbbTrigger"/&gt; &lt;/list&gt;&lt;/property&gt;spring,服务启动报错:"cvc-complex-type.3.2.2: 元素 'ref' 中不允许出现属性 'local'。"将local改为bean就可以将代码改为&lt;proper.

随便推点

Box-cox变换与反变换_sunximei1的博客-程序员秘密

暂时还未仔细研究整理,先转载一个不错的博客https://blog.csdn.net/weixin_44405644/article/details/108045328

arcgis api for javascript本地部署加载地图_huatiananle的博客-程序员秘密

最近开始学习arcgis api for javascript,发现一头雾水,决定记录下自己的学习过程。一、下载arcgis api for js 4.2的library和jdk,具体安装包可以去官网或者csdn找链接下载。二、加载第一张地图1、在线模式,参考知乎大神的文章http://zhihu.esrichina.com.cn/article/3133。就是在外网的情况调用esri官网的api...

[转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND_weixin_30246221的博客-程序员秘密

原贴:cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND上一篇介绍了QUAD_COMMAND渲染命令,顺带介绍了VAO和VBO,这一篇介绍批处理渲染命令BatchCommand,批处理命令的处理在Render中比较简单1 else if(commandType == RenderCommand::Type:: BATCH_COMM...

[Python模块]根据姓名笔画数排序_echosun1996的博客-程序员秘密

最近需要对名单按照笔画数进行排序,而找了一大圈,最常用的方法就是使用excel进行排序。而如果名单是按照逗号等方式分割,就要使用更复杂的方法才能完成排序,十分不便。因此设计了这个按姓名笔画数排序的Python库,并发布到PyPI和github上,需要的童鞋可以参考使用。安装方法:pip install -i https://test.pypi.org/simple/ chinese-stroke-sorting使用方法:&gt;&gt;&gt; from chinese_stroke_sorti

Android学习笔记-两个Activity之间传递数据_hil2000的博客-程序员秘密

情景描述:在主界面MainActivity中的EditText控件中输入数据,单击Send按钮,将信息传递到第二Activity中,并在TextView控件中展示1. 在MainActivity的布局文件为activity_main.xml中给按钮设置单击是触发sendMessage()方法<Button android:layout_width="wrap_content

反杀套路!阿里独家的MySQL优化王者晋级之路,跟弯路说再见_普通网友的博客-程序员秘密

随着互联网时代的兴起,MySQL在数据库领域日益显现出举足轻重的地位,它不断扩大的用户群体就是很好的证明。在这样的背景下,需要越来越多的人在知识资源方面为之付出,将自己对MySQL数据库的学习过程、运维经验、个人理解等记录下来,为行业中的后来者燃起一盏明灯, 让他们少走一些弯路。掌握并熟练使用MySQL的几点建议:建立完成的 MySQL 知识体系 发挥MySQL的最佳性能的优化方法 掌握如何处理海量业务数据和高并发请求 能够轻松掌握那些晦涩难懂的知识,如主从复制、读写分离、事务与锁等。 能够

推荐文章

热门文章

相关标签