pas de fin de ligne dans la sortie d’écriture XML de l’arbre de propriétés boost

Considérez le code suivant en utilisant boost :: property_tree:

#include  #include  using namespace boost::property_tree; int main() { ptree model_tree; model_tree.add("calibrated", "true"); model_tree.add("model..label", "label"); model_tree.add("model.activity..type", "fixed"); write_xml("test.xml", model_tree); } 

En compilant et en exécutant le programme, j’obtiens le résultat suivant:

  true 

Ce qui n’est pas vraiment ce à quoi je m’attendais, car il n’y a pas de nouvelles lignes ni d’indentation. J’aimerais plutôt obtenir ce qui suit:

  true    

Est-ce un bug ou existe-t-il une option pour obtenir ce dernier résultat? Toute aide serait appréciée.

PS: J’utilise Ubuntu 12.04 LTS avec gcc 4.6.3 et boost 1.48.

En attendant, j’ai trouvé la réponse. Il faut utiliser xml_writer_settings, c’est-à-dire:

 xml_writer_settings settings(' ', 4); write_xml("test.xml", model_tree, std::locale(), settings); 

Le premier paramètre du constructeur est le caractère utilisé pour l’indentation, tandis que le second est la longueur de l’indentation. Comme la solution n’est pas documentée, nous espérons que cela aidera d’autres personnes confrontées à des problèmes similaires.

Utiliser les parameters pendant write_xml

parameters Paramètres

1.caractère
2: répéter les temps

 boost::property_tree::xml_writer_settings settings('\t', 1); write_xml("xmlfilePath.xml", pt, std::locale(), settings); 

Avec (au moins) boost 1.58, vous pouvez essayer ceci:

 pt::write_xml( "test.xml", model_tree, std::locale(), pt::xml_writer_make_settings< std::string >( ' ', 4) );