我试图在文档的任何文本节点中找到某个文本,到目前为止我的语句如下所示:
doc.xpath("//text() = 'Alliance Consulting'") do |node|
...
end
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,任何人都可以提出更好的选择吗?
Fla*_*ack 67
这个表达式//text() = 'Alliance Consulting'演绎为布尔值.
如果是这个测试样本:
<r>
<t>Alliance Consulting</t>
<s>
<p>Test string
<f>Alliance Consulting</f>
</p>
</s>
<z>
Alliance Consulting
<y>
Other string
</y>
</z>
</r>
Run Code Online (Sandbox Code Playgroud)
它true当然会回归.
您需要的表达式应该评估为节点集,因此使用:
//text()[. = 'Alliance Consulting']
Run Code Online (Sandbox Code Playgroud)
例如表达:
count(//text()[normalize-space() = 'Alliance Consulting'])
Run Code Online (Sandbox Code Playgroud)
针对上述文件将返回3.
要选择包含'Alliance Consulting'整个字符串值的文本节点(例如'Alliance Consulting provides great services'),请使用:
//text()[contains(.,'Alliance Consulting')]
Run Code Online (Sandbox Code Playgroud)
请注意,在解析器到达文档后,相邻的文本节点应该成为一个.