添加使用Boost的财产树[复制] XML头(Add XML headers using Boost

2019-10-21 10:23发布

这个问题已经在这里有一个答案:

  • 添加xml样式表的处理指令,以提高property_tree 2个回答

我一直工作在一个XML读/写,我用升压的财产树这样做。

一切正常,只有一件事是在输出文件丢失:我想在文件的顶部添加两个标题标签。 眼下,只有头是这样的一个,由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?>

有谁知道我怎么能做到这一点,而不与升压产生之后编辑的文件?

Answer 1:

这个词是“处理指令”。 我敢肯定你不能(他们为什么要推行呢?有毕竟没有加速XML库)。

双重检查后xml_writer_settings确实是有什么控制的处理指令(否则你AVE抑制他们,而是印在整个序言自己)打印。

这是我对其采取与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 -但显然你不只是序列化。 你标记后,在您需要的标记库,preferrably一个XML能够之一。



文章来源: Add XML headers using Boost's property trees [duplicate]