【发布时间】:2014-10-30 19:46:10
【问题描述】:
我尝试了几种不同的方法来解析 XML 文档。我需要在文档中找到具有xattribute 的节点,然后将该节点及其子节点移动到不同的父节点。
我使用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>
【问题讨论】:
-
你所说的“具有'x'属性的节点”是什么意思?您是说要移动具有
name属性kalahari的server元素吗? -
请显示您尝试过的 Perl 代码
-
优秀。太棒了。谢谢你们俩!是的 Borodin,就像在这个例子中一样,匹配一些属性,比如 name 或 ip。我没有移动的示例代码,因为我不知道从哪里开始:/我绝对可以用这个运行。再次感谢!
标签: perl xml-libxml