Ajout de nœuds avec la même clé pour une propriété de l'arbre
Je suis à l'aide du coup de pouce de la propriété de l'arbre à lire et à écrire du XML. À l'aide d'une application de feuille de calcul j'ai fait je veux enregistrer le contenu de la feuille de calcul au format xml. C'est un devoir scolaire, donc je suis obligé d'utiliser le format suivant pour le XML:
<?xml version="1.0" encoding="UTF-8"?>
<spreadsheet>
<cell>
<name>A2</name>
<contents>adsf</contents>
</cell>
<cell>
<name>D6</name>
<contents>345</contents>
</cell>
<cell>
<name>D2</name>
<contents>=d6</contents>
</cell>
</spreadsheet>
Pour un programme de test simple, j'ai écrit:
int main(int argc, char const *argv[])
{
boost::property_tree::ptree pt;
pt.put("spreadsheet.cell.name", "a2");
pt.put("spreadsheet.cell.contents", "adsf");
write_xml("output.xml", pt);
boost::property_tree::ptree ptr;
read_xml("output.xml", ptr);
ptr.put("spreadsheet.cell.name", "d6");
ptr.put("spreadsheet.cell.contents", "345");
ptr.put("spreadsheet.cell.name", "d2");
ptr.put("spreadsheet.cell.contents", "=d6");
write_xml("output2.xml", ptr);
return 0;
}
Sur cette base question je vois le put
méthode remplace rien au niveau de ce nœud, au lieu d'ajouter un nouveau. Ce qui est exactement la fonctionnalité que je vois:
Output.xml
<?xml version="1.0" encoding="utf-8"?>
<spreadsheet>
<cell>
<name>a2</name>
<contents>adsf</contents>
</cell>
</spreadsheet>
Output2.xml
<?xml version="1.0" encoding="utf-8"?>
<spreadsheet>
<cell>
<name>d2</name>
<contents>=d6</contents>
</cell>
</spreadsheet>
À la recherche à la la documentation je vois ce add_child
méthode qui permettra de Add the node at the given path. Create any missing parents. If there already is a node at the path, add another one with the same key.
Je n'arrive pas à comprendre comment l'utiliser que add_child
méthode, quelqu'un pourrait-il expliquer comment l'utiliser?
Est-il une meilleure façon de le faire pour atteindre le format de fichier que je veux?
"spreadsheet.cell.d6"
parce que ce ne serait pas répondre à la xml exigences.
OriginalL'auteur Deekor | 2013-04-21
Vous devez vous connecter pour publier un commentaire.
La
add_child
fonction de membre vous permet d'insérer unproperty_tree
dans le DOM de l'autre comme un nœud enfant. Si le chemin d'accès clé que vous fournissez existe déjà un double de la clé sera ajouté, et l'enfant sera inséré à la place. Si nous changeons votre exemple un peu, nous pouvons examiner les résultats.Lorsque vous appelez
add_child
la première fois, le nœud de clé "feuille de calcul.la cellule" n'existe pas et est créé. Il ajoute ensuite le contenu de l'arborescence (name
etcontents
) pour le nouveau nœud. Lorsque vous appelezadd_child
la deuxième fois qu'il voit que "la feuille de calcul.la cellule" existe déjà, mais à la différence deput
il crée un frère ou une sœur nœud également appelée "cellule" et l'insère à la même emplacement.Le résultat final:
d6
cependant, comment pourrais-je accéder à cette cellule et modifier le contenu dansptr3
?Itérer sur les enfants de
spreadsheet
à la recherche pour tous les enfants de typecell
. Quand vous rencontrez l'un d'obtenir le contenu dename
et si vous trouvez une correspondance de le supprimer. Vous aurez besoin de regarder à la documentation pour plus de détailsbelle explication, pas beaucoup de documentation autour de add_child sur le net autrement .
Il est également
.add(name, value)
.OriginalL'auteur Captain Obvlious