XPath在任何文本节点中查找文本

dag*_*da1 35 xpath

我试图在文档的任何文本节点中找到某个文本,到目前为止我的语句如下所示:

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)

请注意,在解析器到达文档后,相邻的文本节点应该成为一个.

  • @geoidesic 这应该有效: //*[contains(text(), 'Alliance Consulting')] (4认同)