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

kno*_*orv 4 perl xpath cpan

我正在寻找最简单的方法来使用Perl中的XPath查询从XML结构中快速检索数据.

以下代码结构解释了我想要实现的目标:

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');
Run Code Online (Sandbox Code Playgroud)

显然TIMTOWTDI适用,但最简单的方法是什么?

dax*_*xim 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;
Run Code Online (Sandbox Code Playgroud)

  • 确实.它非常快,它有一个非常干净的API,它处理所有的XPath,它处理命名空间和你想要的其他一切,等等,等等. (4认同)

Sha*_*rma 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
}
Run Code Online (Sandbox Code Playgroud)

  • 我不会再称之为XML :: XPath.它很旧,并没有真正维护.XML :: LibXML通常被认为是更好的选择,请参阅http://perl-xml.sourceforge.net/faq/#cpan_modules上的Perl XML FAQ或http://www.socialtext.net/perl5/上的Perl 5 Wiki. recommended_xml_modules (8认同)