Я пробовал несколько разных методов анализа XML-документов. Мне нужно найти узел в документе с атрибутом x
, а затем переместить этот узел со своими дочерними элементами на другой родительский узел.Как перемещать узел в XML-данных с помощью Perl
У меня был некоторый успех, используя XML::LibXML
для определения местонахождения узла и возможности повторения его дочерних элементов, но я застрял в том, как переместить его в другой родитель.
Использование $node->cloneNode(1)
выглядит многообещающим, но я не могу найти хороших примеров его использования.
Это исходные данные XML
<config logdir="/var/log/foo/" debugfile="/tmp/foo.debug">
<old>
<server name="sahara" osname="solaris" osversion="2.6">
<address ip="10.0.0.101">Private</address>
<address ip="10.0.1.101">Private</address>
</server>
<server name="gobi" osname="irix" osversion="6.5">
<address ip="10.0.0.102">Private</address>
</server>
<server name="kalahari" osname="linux" osversion="2.0.34">
<address ip="10.0.0.103">Private</address>
<address ip="10.0.1.103">Private</address>
</server>
</old>
<new>
</new>
</config>
и это результат я хотел бы
<config logdir="/var/log/foo/" debugfile="/tmp/foo.debug">
<old>
<server name="sahara" osname="solaris" osversion="2.6">
<address ip="10.0.0.101">Private</address>
<address ip="10.0.1.101">Private</address>
</server>
<server name="gobi" osname="irix" osversion="6.5">
<address ip="10.0.0.102">Private</address>
</server>
</old>
<new>
<server name="kalahari" osname="linux" osversion="2.0.34">
<address ip="10.0.0.103">Private</address>
<address ip="10.0.1.103">Private</address>
</server>
</new>
</config>
Что вы имеете в виду * "узел с 'х' атрибут" *? Вы говорите, что хотите переместить элемент 'server' с атрибутом' name' 'kalahari'? – Borodin
Пожалуйста, продемонстрируйте код Perl, который вы пробовали – Borodin
Отлично. Это потрясающе. Спасибо вам обоим! Да, Borodin, как в этом примере, соответствует некоторому атрибуту, например name или ip. У меня нет кода для перемещения, поскольку я понятия не имел, с чего начать:/Я могу определенно работать с этим. Еще раз спасибо! –