2013-04-17 71 views
7

當函數保存xml時,是否可以通過write_xml調用中用作第三個參數的xml_writer_settings來省略xml聲明?我的意思是,我希望不要有最初的「xml version =」blah「encoding =」blah blah「部分。我正在搜索互聯網,但我仍然沒有找到答案。如何操作?保存帶升壓xml時省略xml聲明

+1

你可以修剪第一個包含的字符串後write_xml() – AlexT

回答

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)); 
} 
+0

你是什麼意思,「它不是真正的」? – Magallo

+0

@Magallo,這是不可能的。 – ForEveR

+0

啊,不可能。那很令人失望。我知道boost在內部使用了rapidxml。我知道這對rapidxml是可能的,我真的不明白他們爲什麼不給我們這種可能性。無論如何,謝謝你的回答。 – Magallo

7

是的,這是可能的,但你需要調用的函數「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或其他你想要的輸出流來替換標準輸出。

0

看來,沒有xml_writer_settings,write_xml_element不能工作。而xml_writer_settings有兩個不同的不兼容版本;一個和另一個。

在升壓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版本。