Nat*_*enn 2 perl xpath xml-twig
我正在使用XML :: Twig来处理这个XML:
<?xml version="1.0" encoding="UTF-8"?>
<termEntry>
<langSet lang="en">
<ntig>
<termGrp>
<term>trail</term>
<termNote type="partOfSpeech">noun</termNote>
</termGrp>
<descrip type="context">Like in a forest</descrip>
</ntig>
</langSet>
</termEntry>
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码来处理它:
use strict;
use XML::Twig;
my $twig_handlers = {
termEntry => sub { for my $node($_[1]->findnodes('.//descrip|.//termNote')){print $node->text;}},
};
my $twig= new XML::Twig(
TwigRoots => { termEntry => 1},
TwigHandlers => $twig_handlers,
);
$twig->parsefile('C:\Users\me\file.xml');
Run Code Online (Sandbox Code Playgroud)
代码失败了:
error in xpath expression .//descrip|.//termNote around descrip|.//termNote at
C:\Users\nate\Desktop\test.pl line 6
Run Code Online (Sandbox Code Playgroud)
我一直在尝试不同的东西,任何时候我都使用'|' xpath中的字符会破坏程序.它在http://www.xpathtester.com上工作正常(我认为我用'//'替换'.').有想法该怎么解决这个吗?
有多种方法可以做到这一点:
use strict;
use warnings;
use XML::Twig;
sub process {
my ( $twig, $elt ) = @_;
print $_->text, "\n" for ( $elt->findnodes( './/descrip' ),
$elt->findnodes( './/termNote' ) );
}
my $xml = XML::Twig->new( twig_roots => { termEntry => \&process } );
$xml->parse( <<XML );
<?xml version="1.0" encoding="UTF-8"?>
<termEntry>
<langSet lang="en">
<ntig>
<termGrp>
<term>trail</term>
<termNote type="partOfSpeech">noun</termNote>
</termGrp>
<descrip type="context">Like in a forest</descrip>
</ntig>
</langSet>
</termEntry>
XML
Run Code Online (Sandbox Code Playgroud)
Like a forest
noun
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
479 次 |
| 最近记录: |