我最近开始学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>
首先必须要弄清楚谁是谁的孩子,不然程序直接崩溃。 只要没有</...>结尾, 那么当中的所有都是它的孩子。