Perl XML получить узел элемента, используя XML :: LibXML - PullRequest
1 голос
/ 22 апреля 2020

Я хотел бы заменить узел элемента моего 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

1 Ответ

6 голосов
/ 22 апреля 2020

id является атрибутом, а не элементом. Вам нужно использовать другой стиль селектора в выражении xpath.

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

В xpath для атрибута указывается значение @foo. См. https://www.w3.org/TR/1999/REC-xpath-19991116/#path -abbrev для краткого описания этого и другого синтаксиса xpath.

...