TinyXML2使用教程

我最近开始学C++编程。在查找TinyXML2使用教程时,感觉写得都很笼统。看了源码,我决定自己写一个教程。 

TINYXML2源码地址:https://github.com/leethomason/tinyxml2/blob/master/xmltest.cpp

需要在头文件里面添加#include "tinyxml2.h"。

同时编译时加入tinyxml2.cpp。 另声明命令空间 using namespace tinyxml2

第一个例子:

int example_1()
{
XMLDocument doc;   //用于创建一个doc类。  使用TINYXML2库,必须从这开始。

doc.LoadFile( "resources/dream.xml" );   //载入一个xml文件。  

        如果我的文件放在/home/kogan。eg.doc.LoadFile(" /home/kogan/test.xml");

        

return doc.ErrorID();  函数ErrorId()用于检测是否打开。成功返回0.失败返回其他值。

}

第二个例子:

int example_2()
{
static const char* xml = "<element/>";   // 定义了一个指向字符串常量的静态指针,并将字符串的地址赋值给指针。
XMLDocument doc;       //创建一个XMLdocument对象doc
doc.Parse( xml );            //函数Parse()用于检测xml里面的语法错误。 例如是否配对。也可以打开一个xml文件。例如自己创建一个xml文件。然后将内容拷贝进去。

return doc.ErrorID();    函数ErrorId()用于检测是否打开。成功返回0.失败返回其他值。

}

如何检测xml文件

#include <iostream>

#include "tinyxml2.h"

using std::cout;

using std::endl;

using namespace tinyxml2;

int main()

{

   XMLDocument doc;     

   doc.Parse("/home/lee/test.xml");  //这里换成你自己的文件路径

   return 0;

}


第三个例子:

int example_3()
{
static const char* xml =              // 定义了一个指向字符串常量的静态指针,并将字符串的地址赋值给指针。
"<?xml version=\"1.0\"?>"
"<!DOCTYPE PLAY SYSTEM \"play.dtd\">"
"<PLAY>"
"<TITLE>A Midsummer Night's Dream</TITLE>"
"</PLAY>";


XMLDocument doc;   //创建一个XMLdocument对象doc

doc.Parse( xml );        //函数Parse()用于检测xml里面的语法错误。 例如是否配对。也可以打开一个xml文件。例如自己创建一个xml文件。然后将内容拷贝进去。

       //首先,我们要能知道xml里面的内容。 XML声明。定义了文档中使用的XML版本。有时候后面还会有字符编码。

//第二行 官方注释dtd stuff。 (暂时我还不知道怎么翻译,先略过)

  // A Midsummer Night's Dream是TITLE的第一个孩子, 而TITLE又是PLAY的第一个孩子。

// PLAY又是doc的第一孩子。

       //有两种方式获取TITLE里面的内容
       //第一种: 用XMLElement方法获取TITLE的地址。 然后再创建一个常量指针title来指向titleElement获取到的文本地址。
XMLElement* titleElement = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" );
const char* title = titleElement->GetText();
printf( "Name of play (1): %s\n", title );

     

      //第二种: 用XMLElement方法获取TITLE的地址。 然后再使用XMLText 来获取TITLE的第一个孩子的文本

XMLText* textNode = titleElement->FirstChild()->ToText();
title = textNode->Value();
printf( "Name of play (2): %s\n", title );


return doc.ErrorID();

}

最后开始实战

<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
    <channel>
        <title>TechWeb 每日热点推荐 RSS阅读</title>
        <link>http://www.techweb.com.cn/rss/hotnews.xml</link>
        <description>TechWeb晚报,热门人物,TechWeb头条,TechWeb要闻推荐,TechWeb言论</description>
        <copyright>TechWeb.com.cn</copyright>
        <generator>Tiger</generator>
        <lastBuildDate>Wed, 26 Oct 2016 22:16:59 +0800</lastBuildDate>
        <ttl>10</ttl>
        <image>
            <url>http://www.techweb.com.cn/xml.gif</url>
            <title>TechWeb 每日热点推荐 RSS阅读</title>
            <link>http://www.techweb.com.cn/rss/hotnews.xml</link>
        </image>
     <item><title>苹果第四财季净利润下滑19% 这次大中华区也不给力了</title>

<link>http://www.techweb.com.cn/it/2016-10-26/2420458.shtml</link>

 </channel>

首先必须要弄清楚谁是谁的孩子,不然程序直接崩溃。  只要没有</...>结尾, 那么当中的所有都是它的孩子。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值