7

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

4

3 回答 3

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 或您想要的任何其他输出流替换标准输出。

于 2016-03-30T11:14:41.123 回答
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));
}
于 2013-04-17T11:07:26.023 回答
0

似乎没有 xml_writer_settings,write_xml_element 就无法工作。并且 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);

而在 boost 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 版本。

于 2017-09-27T06:07:31.397 回答