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
risposta
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));
}
Cosa intendi con "non è reale"? – Magallo
@Magallo che non è possibile. – ForEveR
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
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.
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.
È possibile tagliare la prima stringa contenente dopo write_xml() – AlexT