【问题标题】:Add XML headers using Boost's property trees [duplicate]使用 Boost 的属性树添加 XML 标头 [重复]
【发布时间】: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。使用您的关键字,我发现一个线程说无法完成,但提供了解决方案。

标签: c++ xml boost boost-propertytree


【解决方案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 的。

【讨论】:

  • 感谢您的回答,但很遗憾我无法使用任何外部库。
猜你喜欢
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多