Какой самый простой способ выполнить XPath-запрос XML-данных в Perl? - PullRequest
4 голосов
/ 11 марта 2011

Я ищу самый простой способ быстрого извлечения данных из структуры XML с использованием запросов XPath в Perl.

Следующая структура кода объясняет, чего я хотел бы достичь:

my $xml_data = "<foo><elementName>data_to_retrieve</elementName></foo>";
my $xpath_query = "//elementName";
my $result_of_query = ... what goes here? ...
die unless ($result_of_query eq 'data_to_retrieve');

Очевидно, что применяется TIMTOWTDI, но какой самый простой способ сделать это?

Ответы [ 2 ]

14 голосов
/ 11 марта 2011

XML :: LibXML не проще, но превосходит XML :: XPath во всех остальных аспектах.

use XML::LibXML;
my $xml_data = XML::LibXML->load_xml(
    string => '<foo><elementName>data_to_retrieve</elementName></foo>'
);
die unless 'data_to_retrieve' eq
    $xml_data
      ->findnodes('//elementName')
      ->get_node(1)
      ->textContent;
6 голосов
/ 11 марта 2011
use XML::XPath;
use XML::XPath::XMLParser;

my $xp = XML::XPath->new(xml => $xml_data);

my $result_of_query = $xp->find('//elementName'); # find all nodes that match

foreach my $node ($result_of_query->get_nodelist) {
       #Do someting
}
...