pugixml工具简单介绍

做智能变电站方面的东西,对于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);
读取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文件
保存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);

以上就是使用pugixml用到的东西,如果遇到其他的问题,可以看提供的帮助文档,说的很详细。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值