首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。