码迷,mamicode.com
首页 > 编程语言 > 详细

c++读取xml

时间:2015-02-02 00:48:16      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

我们用 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原件

<?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>

运行结果:(乱码问题是控制台当前编码不是utf8格式编码引起的,不用担心)

技术分享




c++读取xml

标签:

原文地址:http://blog.csdn.net/tutuboke/article/details/43378415

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!