LinuxForum.Fans
Тема

C & Libxml: копирование элемента в другой документ

Автор: Atrill 5 сообщений 1485 просмотров
#100525

Здравствуйте! Столкнулся с проблемой по рекурсивному копированию содержимого элемента из одного документа в другой.

Например, имеем:

text
<query>
  <data>
    <position>200300br</position>
    <position>190320ks</position>
  </data>
</query>

и

text
<query>
  <data>
    <position>110000tx</position>
    <position>202020ks</position>
  </data>
</query>

после импорта первый документ будет выглядеть так

text

<query>
  <data>
    <position>200300br</position>
    <position>190320ks</position>
    <position>110000tx</position>
    <position>202020ks</position>
  </data>
</query>

Важно то, что неизвестно какое конкретно содержание будет внутри элементов data. Каждый раз могут быть элементы с разными именами, в том числе имеющие дочерние элементы.

В C++, кажется, есть метод importNode, но в С я его не смог найти.
Как можно было бы реализовать импорт? Возможно, уже есть стандартные функции? Гуглил, читал libxml tutorial с оф-сайта - но найти ответ не смог.

#101105

Написал собственную функцию

text
/**
 * Recursive copy nodes from source node to destination node
 * @param xmlNode * source, xmlNode * destitation
 * @return int state ( ok == 1 )
 */
int CopyInnerNodes( xmlNode * xmlnSrcNode, xmlNode * xmlnDestNode )
{
  ASSERT( xmlnSrcNode, 0, "null source node to move elements", 0 );
  ASSERT( xmlnDestNode, 0, "null destination node to move elements", 0 );

xmlNode * xmlnCurrNode = xmlnSrcNode->xmlChildrenNode; while( xmlnCurrNode ) { xmlNode * xmlCpNode = xmlCopyNode( xmlnCurrNode, 1 ); xmlAddChild( xmlnDestNode, xmlCpNode ); xmlnCurrNode = xmlnCurrNode->next; }

return 1; }

#101251

Atrill,
а как Ваша функция работает в том случае, если у ноды есть аттрибуты?

#101466

Проверял - совершенно нормально работает.

#102996

Думается, можно закрывать тему.

Войдите или зарегистрируйтесь, чтобы ответить.