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) );