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

时间:2011-02-22 05:42:07

标签: xpath

我试图在文档的任何文本节点中找到某个文本,到目前为止我的陈述看起来像这样:

doc.xpath("//text() = 'Alliance Consulting'") do |node|
  ...
end

这显然不起作用,有人能提出更好的选择吗?

1 个答案:

答案 0 :(得分:62)

这个表达式//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>

当然会返回true

您需要的表达式应该评估为节点集,因此请使用:

//text()[. = 'Alliance Consulting']

E.g。表达式:

count(//text()[normalize-space() = 'Alliance Consulting'])
针对上述文档的

将返回3

要选择整个字符串值中包含'Alliance Consulting'的文本节点(例如'Alliance Consulting provides great services'),请使用:

//text()[contains(.,'Alliance Consulting')]

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