2013-04-17 6 views
7

E 'possibile, tramite i xml_writer_settings usati come terzo parametro nella chiamata write_xml, di omettere la dichiarazione XML quando la funzione salva l'XML? Voglio dire, mi piacerebbe non avere l'iniziale "xml version =" "encoding = 'bla bla bla' parte. Sto ricerca su internet, ma non ho ancora trovato una risposta. Come fare?omettere dichiarazione XML quando si salva xml con boost

+1

È possibile tagliare la prima stringa contenente dopo write_xml() – AlexT

risposta

1

No, non è possibile. look here for members of xml_writer_settings

E anche, write_xml chiamate write_xml_internal che è (in aumento 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

Cosa intendi con "non è reale"? – Magallo

+0

@Magallo che non è possibile. – ForEveR

+0

ah, non è possibile. Bene, è molto deludente. Sapevo che boost utilizzava il rapidxml internamente. So che questo è possibile con rapidxml, davvero non capisco perché non ci hanno dato questa possibilità. Grazie comunque per la risposta. – Magallo

7

Sì, è possibile, ma è necessario chiamare la funzione 'write_xml_element' . direttamente Ecco un esempio con 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>()); 

Certo. puoi sostituire lo standard output con std :: ofstream o qualsiasi altro flusso di output che desideri.

0

Sembra che write_xml_element non può funzionare senza xml_writer_settings. E xml_writer_settings ha due diverse versioni incompatibili; uno con e un altro con.

In spinta v1.58 questa linea è valida:

boost::property_tree::xml_writer_settings<std::string> settings; 
boost::property_tree::xml_parser::write_xml_element(xmlStream,ptree::key_type(),pt_,-1, settings); 

mentre in spinta 1,54 queste sono valide:

boost::property_tree::xml_writer_settings<char> settings; 
boost::property_tree::xml_parser::write_xml_element(xmlStream,ptree::key_type(),pt_,-1, settings); 

non sono sicuro se c'è qualche soluzione per loro unificazione. Quindi considera la versione di boost quando lavori con write_xml_element.