Perl Xpath :: Как извлечь все значения атрибутов и имена элементов, которым принадлежат атрибуты - PullRequest
0 голосов
/ 27 февраля 2012

Я новичок в XPath и хотел бы знать, как извлечь значения из документа XML.

У меня есть XML:

<root>
<element1 attrib1 = value1 attrib2 = value2 >
<element2 attrib1 = value1 attrib2 = value2 >
<element3 attrib1 = value1 attrib2 = value2 >
</root>

Что я хочу сделать, это извлечь всепары attrib = value вместе с именем элемента.Например: element1 attrib1 value1 element2 attrib2 value2.,element3 attrib2 value2

Я пытался использовать запрос '//@*' XPath, который возвращает attrib = значение, а не имя elt.

Есть идеи?

Спасибо!

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Вы можете использовать '*/*', чтобы найти все элементы на 2-м уровне.

my $xp = XML::XPath->new( ioref => \*DATA );

# select the element nodes without having to specify their names
my @element_nodes = $xp->findnodes('*/*'); 

foreach my $element (@element_nodes) {
    # see https://metacpan.org/module/XML::XPath::Node::Element
    print $element->getName;
    foreach my $attribute ($element->getAttributes) {
        # see https://metacpan.org/module/XML::XPath::Node::Attribute
        print ' '.$attribute->getName.' '.$attribute->getData;
    }
    print "\n";
}

__DATA__
<root>
<element1 attrib1="value1" attrib2="value2" />
<element2 attrib1="value1" attrib2="value2" />
<element3 attrib1="value1" attrib2="value2" />
</root>
1 голос
/ 27 февраля 2012

Чтобы извлечь значения из файла XML, вам нужно сделать следующее:

use XML::XPath;

my $i;

#specify the file name

my $xpath = XML::XPath->new(filename => "file.xml");

# Now you can traverse through the nodes and get the atrributes

$i = $xp->find('/root/element1')->get_node(1);

# store the extracted values in an array 

push @attrib1, sprintf($i->getAttribute('attrib1'));

push @attrib2, sprintf($i->getAttribute('attrib2'));

$i = $xp->find('/root/element2')->get_node(1);

push @attrib1, sprintf($i->getAttribute('attrib1'));

push @attrib2, sprintf($i->getAttribute('attrib2'));

END

См. Это для более подробной информации о Xpath

http://search.cpan.org/~msergeant/XML-XPath-1.13/XPath.pm

...