pugixml工具简单介绍

pugixml工具简单介绍对于XML文件的解析是无法避免的,最近使用了pugixml这个开源的解析工具,发现真的是太好用了。3、以源代码的方式提供,只有三个文件:pugi

大家好,欢迎来到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用到的东西,如果遇到其他的问题,可以看提供的帮助文档,说的很详细。

pugixml工具简单介绍

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/71277.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信