使用 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 标头 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 boost 属性树提取 xml 文件的 DOCTYPE 节点?

使用 boost 属性树解析 XML

使用属性树在 boost 中解析 xml

使用 Boost 属性树解析 SVG (XML)

Boost属性树xml解析No such node()

打印 boost 属性树生成的 xml