2013-04-17 2 views
7

Возможно ли, используя xml_writer_settings, используемый в качестве третьего параметра в вызове write_xml, опустить объявление xml, когда функция сохраняет xml? Я имею в виду, что я бы не хотел иметь начальную часть «xml version =« blah »encoding =« blah blah ». Я ищу в Интернете, но я до сих пор не нашел ответа. Как это сделать?опустить объявление xml при сохранении xml с boost

+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

@ Магалло, что это невозможно. – ForEveR

+0

ах, невозможно. Ну, это очень разочаровывает. Я знал, что форсированный метод используется вовремя. Я знаю, что это возможно с помощью quickxml, я действительно не понимаю, почему они не дали нам этой возможности. Спасибо за ваш ответ. – Magallo

7

Да, это возможно, но вам необходимо вызвать функцию «write_xml_element» Ниже приведен пример с повышением 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

Кажется, что write_xml_element не может работать без xml_writer_settings. И 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.

Смежные вопросы