使用 Boost 的属性树添加 XML 标头 [重复]
Posted
技术标签:
【中文标题】使用 Boost 的属性树添加 XML 标头 [重复]【英文标题】:Add XML headers using Boost's property trees [duplicate] 【发布时间】:2014-12-15 13:36:32 【问题描述】:我一直在研究 XML 读取器/写入器,并且我使用 Boost 的属性树来做这件事。
一切正常,输出文件中只缺少一件事:我想在文件顶部添加两个标题标签。现在,唯一的 header 就是这个,由 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 生成文件后不编辑文件的情况下做到这一点?
【问题讨论】:
字是“加工指令”。而且我很确定你不能(他们为什么要实现它?毕竟没有 Boost Xml 库) @sehe 嗯,有 write_xml() 函数,为什么不可以呢? 因为它不写xml!它写了一个属性树。 (duh) (它恰好以 XML 子集的格式编写,但这绝不意味着必须存在其他 XML 特性) 它写了一个属性树,但是以xml的方式。我看不出您要证明什么,我很确定有一种方法可以做我想做的事,只是在文档中没有找到。 你说得对,@sehe。使用您的关键字,我发现一个线程说无法完成,但提供了解决方案。 【参考方案1】:这个词是“处理指令”。而且我很确定你不能(他们为什么要实现它?毕竟没有 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 的。
【讨论】:
感谢您的回答,但很遗憾我无法使用任何外部库。以上是关于使用 Boost 的属性树添加 XML 标头 [重复]的主要内容,如果未能解决你的问题,请参考以下文章