2010-08-17 5 views
2

Comment obtenir une copie complète d'un document xml_document RapidXML?Clonage rapidxml :: xml_document

Il existe une fonction clone_node; comment utiliser pour créer une copie complète d'un document existant?

+0

La plupart du temps, les bibliothèques xml vous donneront l'option de cloner seulement le noeud, ou de faire un clone profond, que vous pouvez définir pour vous donner l'arbre en dessous. – James

Répondre

1

Je suis sûr qu'il ya un nettoyant, approche basée sur l'arbre, mais je l'ai résolu avec ce qui suit, où str est la sortie XML à partir d'un autre doc:

xml_document<> doc; 
doc.parse<0>(doc.allocate_string(str)); 
3

que vous avez déjà deviné il y a la fonction clone_node méthode. De l'aide en ligne:

xml_node * clone_node (const xml_node < Ch> * Source, xml_node < Ch> * Résultat = 0);

Clone un xml_node et sa hiérarchie de nœuds enfants et d'attributs. Les nœuds et les attributs sont alloués à partir de ce pool de mémoire. Les noms et les valeurs ne sont pas clonés, ils sont partagés entre le clone et la source. Le noeud de résultat peut éventuellement être spécifié en tant que second paramètre, auquel cas son contenu sera remplacé par un noeud source cloné. Ceci est utile lorsque vous voulez cloner un document entier.

L'approche proposée par FreshCode est assez simple, mais ajoute une surcharge inutile de « toString & parseBack » que vous pouvez éviter.