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

Mag*_*llo 7 c++ xml boost boost-propertytree

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

Sta*_*kov 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>());
Run Code Online (Sandbox Code Playgroud)

当然.您可以使用std :: ofstream或您想要的任何其他输出流替换标准输出.


For*_*veR 1

不,这是不可能的。在这里查找 xml_writer_settings 的成员

而且,write_xml调用write_xml_internal的是(在 boost 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));
}
Run Code Online (Sandbox Code Playgroud)