gpt4 book ai didi

perl - XML::Twig xpath 栏

转载 作者:行者123 更新时间:2023-12-03 15:58:26 25 4
gpt4 key购买 nike

我正在使用 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>

我正在使用以下代码来处理它:

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');

代码失败:

error in xpath expression .//descrip|.//termNote around descrip|.//termNote at 
C:\Users\nate\Desktop\test.pl line 6

我一直在尝试不同的东西,每次我使用“|” 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

输出

Like a forest
noun

关于perl - XML::Twig xpath 栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8197875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com