题
我正在使用 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'
不隶属于 StackOverflow