Perl::XPath
XML文書のパースというと昔はDOMしかなかったが、
「XPathが速い」、
「いやいや、Staxが速い」
なんか同僚と話す。
とりあえず、XPathを試してみた。
#!/usr/bin/perl $xmldata = <<EOM; <list> <itempack> <item id="1">Orange</item> <item id="2">Apple</item> <item id="3">Apple</item> <item id="4">Lemon</item> </itempack> </list> EOM use XML::XPath; $xp = XML::XPath->new(xml=>$xmldata); my ( @nodes ) = $xp->findnodes('/list/itempack'); foreach my $node (@nodes ) { my ( @c_nodes ) = $node->findnodes('./item'); foreach $c_node(@c_nodes){ if ( $c_node->findvalue('./text()="Lemon"') ) { print $c_node->string_value, "\n"; print $c_node->findvalue('./@id'), "\n"; } } print "***\n"; }
ノードアクセスを簡単に書ける。なるほど。