2013-04-17 7 views
7

Ist es möglich, über die xml_writer_settings, die als dritter Parameter im write_xml-Aufruf verwendet werden, die XML-Deklaration wegzulassen, wenn die Funktion die XML speichert? Ich meine, ich möchte nicht die ursprüngliche "xml version =" blah "encoding =" blah blah "Teil haben. Ich suche im Internet, aber ich habe immer noch keine Antwort gefunden. Wie geht das?XML-Deklaration auslassen, wenn XML mit Boost gespeichert wird

+1

Sie können nur die erste Zeichenfolge mit nach write_xml() – AlexT

Antwort

1

Nein, es ist nicht möglich. look here for members of xml_writer_settings

Und auch write_xml Anrufe write_xml_internal, die (im Boost 1,52) ist

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

trimmen Was meinst du mit "es ist nicht real"? – Magallo

+0

@Magallo, dass es nicht möglich ist. – ForEveR

+0

ah, nicht möglich. Nun, es ist sehr enttäuschend. Ich wusste, Boost verwendet intern rapidxml. Ich weiß, dass dies mit rapidxml möglich ist, ich verstehe wirklich nicht, warum sie uns diese Möglichkeit nicht gegeben haben. Danke für deine Antwort trotzdem. – Magallo

7

Ja, es ist möglich, aber Sie werden die Funktion ‚write_xml_element‘ aufrufen müssen Hier ist ein Beispiel mit 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>()); 

Natürlich. Sie können die Standardausgabe durch std :: ofstream oder einen anderen gewünschten Ausgabestream ersetzen.

0

Es scheint, dass write_xml_element ohne xml_writer_settings nicht funktionieren kann. Und xml_writer_settings hat zwei verschiedene inkompatible Versionen; eins mit und eins mit.

In boost v1.58 diese Zeile gilt:

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

während im Boost 1,54 diese gültig sind:

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

Ich bin nicht sicher, ob es eine Lösung ist, sie für die Vereinheitlichung. Betrachten Sie die Boost-Version, wenn Sie mit write_xml_element arbeiten.

Verwandte Themen