Perl получить XML значение узла, используя XML: LibXML - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь распечатать содержимое узлов для дальнейшей обработки. Хотел распечатать x_id="123" и узел "a" содержимого. Я использую парсер XML: Lib XML. Любое предложение? Я очень новичок в этом анализаторе файлов.

Пример XML:

<header>
    <id x_id="123">                            
        <a>testing</a>
        <b></b>
    </id>
</header>

Текущий не рабочий код:

use strict;
use warnings;
use XML::LibXML;

my $template = "xx.xml";
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($template);
my($object) = $doc->findnodes("/header/id/");
print $doc->findvalue("/header/id/x_id");

1 Ответ

1 голос
/ 11 апреля 2020

Пример кода для демонстрации

use strict;
use warnings;
use feature 'say';

use XML::LibXML;

my $file = 'test.xml';

my $dom = XML::LibXML->load_xml(location => $file);

foreach my $node ($dom->findnodes('//idset')) {
    say 'NodeID: ', $node->{id};
    say 'ItemA: ', $node->findvalue('./a');
    say 'ItemB: ', $node->findvalue('./b');
    say '';
}

Содержимое входного файла text.xml

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

Вывод

NodeID: 100
ItemA: item_a
ItemB: item_b

NodeID: 101
ItemA: item_c
ItemB: item_d
...