【发布时间】:2011-02-12 23:53:13
【问题描述】:
我有一个具有以下形式的文档的 XML 表示:
<response>
<paragraph>
<sentence id="1">Hey</sentence>
<sentence id="2">Hello</sentence>
</paragraph>
</response>
我正在尝试使用 XML::LibXML 来解析文档并获取句子的位置。
my $root_node = XML::LibXML->load_xml( ... )->documentElement;
foreach my $sentence_node ( $root_node->findnodes('//sentence')->get_nodelist ){
print $sentence_node->find( 'position()' );
}
我得到的错误是“XPath 错误:无效的上下文位置错误”。我已经阅读了docs 并发现了这个有趣的花絮
在初始上下文中评估 XPath 函数 position() 会引发 XPath 错误
我的问题是我不知道如何处理这些信息。什么是“初始背景”?如何让引擎自动跟踪上下文位置?
回复:@Dan
欣赏答案。我试过你的例子,它奏效了。在我的代码中,我假设 context 是我的 perl 变量表示的节点。所以,$sentence->find('position()') 我想成为'./position()'。尽管看到了一个可行的例子,但我仍然做不到
foreach my $sentence ...
my $id = $sentence->getAttribute('id');
print $root_node->findvalue( '//sentence[@id=' . "$id]/position()");
不过,我可以做到
$root_node->findvalue( '//sentence[@id=' . "$id]/text()");
position() 只能像你一样用来限制查询吗?
【问题讨论】:
标签: perl position xml-libxml