PerlXML使用XML::LibXML获取元素节点



我想替换XML文件的元素节点,但我甚至没有成功获得该节点。下面的代码适用于其他子节点,但不适用于id节点。

这是我的XML文件:

<header>
<idset id="100">                            
<a>item_a</a>
<b>item_b</b>
</idset>
</header>

这是我的代码:

#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use XML::LibXML;
my $file = 'test.xml';
my $parser = XML::LibXML->new();
my $doc = $parser->load_xml(location => $file);
my($object11) = $doc->findnodes('/header/idset');
say 'a: ',$object11->findvalue('./a');
say 'b: ',$object11->findvalue('./b');
say 'id: ',$object11->findvalue('./id');

当前结果:

a: item_a
b: item_b
id:

预期结果:

a: item_a
b: item_b
id: 100

id是一个属性,而不是元素。您需要在xpath表达式中使用不同的选择器样式。

say 'id: ',$object11->findvalue('./@id');

在xpath中,属性以@foo为目标。看见https://www.w3.org/TR/1999/REC-xpath-19991116/#path-缩写为此语法和其他xpath语法的简短摘要。

最新更新