如何使用 boost ptree 删除 xml 属性?
Posted
技术标签:
【中文标题】如何使用 boost ptree 删除 xml 属性?【英文标题】:how to remove xml's attribute using boost's ptree? 【发布时间】:2014-02-01 18:39:25 【问题描述】:如何使用boost的ptree删除xml属性title? 我有一个 xml,我尝试按照代码删除属性 title 并保存到新 xml 但失败(new.xml 仍然有 title 属性)。
xml:
<?xml version="1.0" encoding="utf-8"?>
<tokens title="issues"></tokens>
代码:
ptree pt;
read_xml("C://old.xml", pt);
pt.erase("tokens.<xmlattr>.title"); //try one
pt.erase("tokens.<xmlattr>"); //try two
write_xml("C://new.xml", pt);
有没有boost ptree删除属性的方法?
【问题讨论】:
This 似乎有效(我认为这是因为erase
只能影响ptree
的直系子级,但我不确定)。如果您用boost-propertytree 标记您的问题,您将有更好的机会找到图书馆专家。
【参考方案1】:
您可以尝试这样的事情(通过适当的错误处理):
#include <boost/property_tree/xml_parser.hpp>
#include <boost/property_tree/exceptions.hpp>
#include <sstream>
#include <iostream>
using namespace boost;
using namespace boost::property_tree;
using namespace std;
int main()
ptree pt;
std::stringstream strm;
strm << "<?xml version='1.0' encoding='utf-8'?> <tokens title='issues'></tokens>";
read_xml(strm, pt);
pt.find("tokens")->second.erase("<xmlattr>");
write_xml(cout, pt, xml_writer_make_settings(' ', 2));
输出:
$ ./test
<?xml version="1.0" encoding="utf-8"?>
<tokens/>
【讨论】:
或者你可以使用:pt.get_child("tokens").erase("pt.get_child("tokens.<xmlattr>").erase("title");
但是,为什么我不能通过 pt.erase("tokens.以上是关于如何使用 boost ptree 删除 xml 属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ptree(boost) 遍历 XML 文件中的同名子级?
如何使用 Boost ptree C++ 解析其值中包含 HTML 标记的 XML
如何使 boost ptree 以相同的方式解析 xml 和 json?
Boost Property ptree:boost write_xml 在 xml 文件的子元素中添加 unicode 0x0 字符