标签:
我们用 TinyXML2 库来解析操作xml
下载网址:http://grinninglizard.com/tinyxml2docs/index.html
这个库很简单,首先我们从github上把库下载下来,只要把 tinyxml2.h 和 tinyxml2.cpp 拷贝到工程目录下,添加到工程中就可以了。
下面是读取常用的API,简单介绍一下
RootElement(); //获取跟节点 FirstChildElement();//获取第一个值为value的子节点 默认为空则返回第一个节点 NextSiblingElement();//当前对象的下一个节点 FirstAttribute();//获取第一个属性值 Next(); //获取下一个属性值 GetText(); //获取节点的内容 有正序的,自然有反序的,可以直接取 最后一个,上一个
直接贴代码吧,自己感觉写的已经完美了,不想看的同学可以拷贝直接用了,连接的空格和换行 或存储 根据需求改下就行了。
#include <iostream> #include "tinyxml2.h" using namespace tinyxml2; using namespace std; void read_xml(XMLElement *surface) { while (surface) { const XMLAttribute *attr = surface->FirstAttribute();//获取第一个属性值 while(attr) { cout << " " << attr->Value(); attr = attr->Next(); //获取下一个属性值 } const char* content = surface->GetText(); //获取节点的内容 if (content) { cout << " " << content << endl; } XMLElement *surface1 = surface->FirstChildElement(); //查看当前对象是否有子节点 if(surface1) { read_xml(surface1);//递归调用 } surface = surface->NextSiblingElement();//当前对象的下一个节点 } } int main() { tinyxml2::XMLDocument mydocument; //声明xml对象 mydocument.LoadFile("utf8test.xml"); //载入xml文件 XMLElement *rootElement = mydocument.RootElement(); //获取跟节点 XMLElement *surface = rootElement->FirstChildElement();//获取第一个值为value的子节点 默认为空则返回第一个节点 read_xml(surface); cin.get(); }
<?xml version="1.0" encoding="UTF-8"?> <document> <English name="name1" value="value1"> 对方的规范地方<English> The world has many languages</English> <English> 222</English> <xxx>xx <xx><x haha="11" hehe="22">doubi</x></xx></xxx> </English> <Russian name="name2" value="value2">Мир имеет много языков</Russian> <Spanish name="el nombre" value="el valor">el mundo tiene muchos idiomas</Spanish> <SimplifiedChinese name="名字" value="价值">世界有很多语言</SimplifiedChinese> <Русский название="name" ценность="value"><имеет></Русский> <汉语 名字="name" 价值="value">世界有很多语言</汉语> <Heavy>"Mëtæl!"</Heavy> <ä>Umlaut Element</ä> </document>
标签:
原文地址:http://blog.csdn.net/tutuboke/article/details/43378415