首页 > 代码库 > c++读取xml

c++读取xml

我们用 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=http://www.mamicode.com/"value1">>
运行结果:(乱码问题是控制台当前编码不是utf8格式编码引起的,不用担心)

技术分享




c++读取xml