我一直在研究XML阅读器/编写器,我使用了Boost的属性树来实现这一目标。
一切正常,输出文件中只缺少一件事:我想在文件顶部添加两个标题标签。现在,唯一的标题是这一个,由Boost的write_xml()
函数自动编写:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
但是,我想在已经存在的地方下面加上这两个:
<!-- Custom stylesheet -->
<?xml-stylesheet type="text/xsl" href="browser_view.xslt"?>
<!-- Authentic View -->
<?xmlspysps authentic_view.sps?>
有没有人知道如何在不使用Boost生成文件的情况下编辑文件后才能做到这一点?
答案 0 :(得分:2)
这个词是“处理指令”。而且我很确定你不能(为什么他们会实现呢?毕竟没有Boost Xml库。)
在仔细检查xml_writer_settings
后,确实没有任何东西可以控制处理指令的打印(否则你可能会抑制它们,而是自己打印整个序言)。
以下是我对PugiXML的看法:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <iostream>
#include <pugixml.hpp>
int main() {
std::stringstream ss;
{
boost::property_tree::ptree pt;
pt.add("demo", "bla");
boost::property_tree::xml_parser::write_xml(ss, pt);
}
{
pugi::xml_document doc;
doc.load(ss);
auto pi = doc.prepend_child(pugi::xml_node_type::node_pi);
pi.set_name("xmlspysps");
pi.set_value("authentic_view.sps");
pi = doc.prepend_child(pugi::xml_node_type::node_pi);
pi.set_name("xml-stylesheet");
pi.set_value("type=\"text/xsl\" href=\"browser_view.xslt\"");
doc.save_file("test.xml");
}
}
保存:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="browser_view.xslt"?>
<?xmlspysps authentic_view.sps?>
<demo>bla</demo>
当然,如果你真的想要序列化一个ptree
,这是非常低效的 - 但显然你不是只是序列化。你正在标记,你需要一个标记库,最好是一个支持XML的文件库。