大家好,欢迎来到IT知识分享网。
做智能变电站方面的东西,对于XML(SCD)文件的解析是无法避免的,最近使用了pugixml这个开源的解析工具,发现真的是太好用了。
吸引我的地方主要以下几点:
1、装载速度很快。比C++语言写的timyxml快很多,比C#里面的xml解析工具也快很多;
2、C++编写,支持跨平台,同时支持unicode编码,支持中文;
3、以源代码的方式提供,只有三个文件:pugiconfig.hpp、pugixml.cpp、pugixml.hpp,只需添加以上三个文件,就可以使用了,很方便;
4、支持XPath查找,这个确实是很方便。
下面给出下载地址:官网地址
使用简单说明:
首先,大伙比较关心的是编码的问题,就是有时候会出现中文乱码的问题,我用的是qt,说一下我的解决方法:
1、读取XML文件的时候,肯定要用utf-8,这个是必然的;
2、再出现中文乱码的问题,其实是Qt编码设置的问题了,下面给出我常用的编码设置;
3、如果再是有问题,说明你的源文件不是utf-8的吧。
//设置界面显示的编码
QTextCodec *codec=QTextCodec::codecForName(“GBK”);
QTextCodec::setCodecForLocale(codec);
//设置翻译成其他语言的格式
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
//QTextCodec::setCodecForTr(codec);
//设置读取源文件采取的编码方式
QTextCodec *codec1=QTextCodec::codecForName(“UTF-8”);
QTextCodec::setCodecForCStrings(codec1);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
读取XML文件
using namespace pugi;
xml_document doc;
//由于SCD文件采用的utf8格式的编码,所以装载的时候,需要设置一下编码方式
if (!doc.load_file(filePath,pugi::parse_default,pugi::encoding_utf8))
{
return -1;
}
//获取根节点
xml_node root=doc.root();
//XPath对节点的查找,具体的xpath的规则,大伙可以自己去找相关的资料
xpath_node_set IED_list=doc.select_nodes(“/SCL/IED”);
for(xpath_node_set::const_iterator it=IED_list.begin();it!=IED_list.end();it++)
{
//遍历节点,获取属性值
xpath_node it_xpath=*IED_it;
QString name=it_xpath.node().attribute(“name”).value();
}
//对于节点text值的获取,对于值的获取可以根据实际情况进行选择,比如as_string(),as_int()等,这个也是很方便。
xml_node node;
QString text=node.text().as_string();####保存XML文件
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
保存XML文件
xml_document doc;
//增加说明
xml_node decl=doc.prepend_child(pugi::node_declaration);
decl.append_attribute(“version”)=”1.0″;
decl.append_attribute(“encoding”)=”UTF-8″;
//增加节点
xml_node root = doc.append_child(“PSCD”);
//给节点增加属性,并赋值
root.append_attribute(“name”)=”test”;
//增加子节点
xml_node child_node=root.append_child(“child”);
//**增加给节点赋值text**
xml_node childText_node=root.append_child(“textNode”);
childText.append_child(pugi::node_pcdata).set_value(“text”);
//保存文件,这里特别要说明的一个问题就是参数的设置:pugi::format_no_escapes。设置成这样才能正确输出特殊符号”<,&”等
doc_goPub.save_file(“outFile.xml”,”\t”,pugi::format_no_escapes,pugi::encoding_utf8);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
以上就是使用pugixml用到的东西,如果遇到其他的问题,可以看提供的帮助文档,说的很详细。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/71277.html