在Perl中,最简单的XPath查询XML数据的方法是什么?

4
我希望你能帮我用Perl语言,在XML结构中使用XPath查询,以最简单的方式快速检索数据。以下代码结构说明了我的目标:
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

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;

4
确实。它非常快速、具有清晰的API,可以处理所有XPath,处理命名空间以及您想要的其他任何内容,等等,等等,等等。 - ikegami

6
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
}

没错,XML::XPath 是最好的选择。 - friedo
8
我不会选择XML::XPath作为首选。它过时了且没有得到很好的维护。通常认为XML::LibXML是更好的选择,请参考Perl XML FAQ(http://perl-xml.sourceforge.net/faq/#cpan_modules)或Perl 5 Wiki(http://www.socialtext.net/perl5/recommended_xml_modules)。 - mirod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接