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