我正在使用 pQuery (jQuery的Perl端口)来选择元素并从HTML文档中检索文本。

考虑以下标记:

<x>
   <y>code1</y>
   <z>stuff</z>
   <y>code2</y>
   <z>foobar</z>
</x>

以下pQuery代码:

my $target_value = pQuery($markup)->find($pquery_selector)->text;

我正在尝试制定 $ pquery_selector ,以便它使用以下规则匹配上面标记中的&lt; z&gt; foobar&lt; / z&gt; :找到< code> z - 在 y -element之后的元素,其中包含&quot; code2&quot; 的正文。虽然这可以使用jQuery,但我不确定pQuery语法是否足以处理这样的表达式。

使用pQuery语法可以进行这种选择吗?

有帮助吗?

解决方案

在jQuery中,有可能编写一个像'y:contains(code2)+ z'这样的选择器。但是,pQuery仍然没有完成(从版本0.07开始),像x + z这样的选择器只是给出了一个错误,表明模块开发人员还没有去翻译jQuery代码的那一部分。

由于pQuery自2008年以来一直未被触及,我建议自己修复它(代码在cpan和github上),或者使用更成熟的模块,比如HTML :: TreeBuilder :: XPath(这需要学习XPath语法,但实际上适用于非平凡的事情。)

上述jQuery选择器的XPath等价物将是'// y [contains(text(),'code2')] / following-sibling :: z'

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top