Клонирование rapidxml :: xml_document - PullRequest
2 голосов
/ 17 августа 2010

Как мне получить полную копию RapidXML xml_document?

Есть функция clone_node; как использовать для создания полной копии существующего документа?

Ответы [ 2 ]

3 голосов
/ 18 октября 2012

, как вы уже догадались, есть метод clone_node. Из онлайн справки:

xml_node * clone_node (const xml_node * source, xml_node * result = 0);

Клонирует xml_node и его иерархию дочерних узлов и атрибутов. Узлы и атрибуты выделяются из этого пула памяти. Имена и значения не клонируются, они разделяются между клоном и источником. Результирующий узел может быть необязательно указан в качестве второго параметра, и в этом случае его содержимое будет заменено клонированным исходным узлом. Это полезно, когда вы хотите клонировать весь документ.

Подход, предложенный FreshCode , довольно прост, но добавляет «toString & parseBack» ненужные издержки, которых вы, возможно, захотите избежать.

1 голос
/ 20 августа 2010

Я уверен, что есть более чистый, основанный на деревьях подход, но я решил его следующим образом, где str - это вывод XML из другого документа:

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