我希望perl中的方法可以执行以下操作示例xml文件
<?xml version="1.0"?>
<data>
<country name="Liechtenstein">
<rank>1</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/> First Country
</country>
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/> Second Country
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/> Third Country
</country>
</data>
当我输入Elment等级作为输入时,输出应如下所示。
<?xml version="1.0"?>
<data>
<country name="Liechtenstein">
<rank>1</rank>
</country>
<country name="Singapore">
<rank>4</rank>
</country>
<country name="Panama">
<rank>68</rank>
</country>
</data>
此解决方案使用XML::LibXML
,并且通过查找country
具有所需节点名称的每个元素的子代,然后删除所有子代并重新添加所选元素来工作。
use strict;
use warnings;
use XML::LibXML;
my $doc = XML::LibXML->load_xml(IO => *DATA, no_blanks => 1);
my $nodename = 'rank';
for my $country ($doc->findnodes('/data/country')) {
my ($node) = $country->findnodes($nodename);
$country->removeChildNodes;
$country->appendChild($node);
}
print $doc->toString(1);
__DATA__
<?xml version="1.0"?>
<data>
<country name="Liechtenstein">
<rank>1</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/> First Country
</country>
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/> Second Country
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/> Third Country
</country>
</data>
输出
<?xml version="1.0"?>
<data>
<country name="Liechtenstein">
<rank>1</rank>
</country>
<country name="Singapore">
<rank>4</rank>
</country>
<country name="Panama">
<rank>68</rank>
</country>
</data>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句