使用boost保存xml时省略xml声明

时间:2013-04-17 10:57:49

标签: c++ xml boost boost-propertytree

当函数保存xml时,是否可以通过在write_xml调用中用作第三个参数的xml_writer_settings来省略xml声明?我的意思是,我不想让最初的“xml version =”blah“encoding =”blah blah“部分。我正在网上搜索但我还没有找到答案。怎么做?

3 个答案:

答案 0 :(得分:8)

是的,这是可能的,但您需要直接调用函数'write_xml_element'。这是一个使用boost 1.49的例子:

using namespace boost::property_tree;
ptree pt;
...
write_xml_element(std::cout,ptree::key_type(),pt,-1,xml_writer_settings<ptree::key_type::value_type>());

当然。您可以使用std :: ofstream或任何其他所需的输出流替换标准输出。

答案 1 :(得分:1)

不,这是不可能的。 look here for members of xml_writer_settings

同样,write_xml调用write_xml_internal(在增强1.52中)

template<class Ptree>
void write_xml_internal(
std::basic_ostream<typename Ptree::key_type::value_type> &stream, 
const Ptree &pt,
const std::string &filename,
const xml_writer_settings<typename Ptree::key_type::value_type> & settings)
{
    typedef typename Ptree::key_type::value_type Ch;
    typedef typename std::basic_string<Ch> Str;
    stream  << detail::widen<Ch>("<?xml version=\"1.0\" encoding=\"")
            << settings.encoding
            << detail::widen<Ch>("\"?>\n");
    write_xml_element(stream, Str(), pt, -1, settings);
    if (!stream)
        BOOST_PROPERTY_TREE_THROW(xml_parser_error("write error", filename, 0));
}

答案 2 :(得分:0)

看来write_xml_element在没有xml_writer_settings的情况下无法正常工作。 xml_writer_settings有两个不同的不兼容版本;一个与另一个。

在boost v1.58中,此行有效:

boost::property_tree::xml_writer_settings<std::string> settings;
boost::property_tree::xml_parser::write_xml_element(xmlStream,ptree::key_type(),pt_,-1, settings);

在增强1.54中这些是有效的:

boost::property_tree::xml_writer_settings<char> settings;
boost::property_tree::xml_parser::write_xml_element(xmlStream,ptree::key_type(),pt_,-1, settings);

我不确定是否有任何解决方案来统一它们。因此在使用write_xml_element时请考虑使用boost版本。