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