XPath busca texto en cualquier nodo de texto

Resuelto dagda1 asked hace 13 años • 1 respuestas

Estoy tratando de encontrar un texto determinado en cualquier nodo de texto de un documento, hasta ahora mi declaración se ve así:

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

Obviamente esto no funciona, ¿alguien puede sugerir una alternativa mejor?

dagda1 avatar Feb 22 '11 12:02 dagda1
Aceptado

Esta expresión //text() = 'Alliance Consulting'equivale a un valor booleano.

En el caso de esta muestra de prueba:

<r>
    <t>Alliance Consulting</t>
    <s>
        <p>Test string
            <f>Alliance Consulting</f>
        </p>
    </s>
    <z>
        Alliance Consulting
        <y>
            Other string
        </y>
    </z>
</r>

truePor supuesto que volverá .

La expresión que necesita debe evaluarse como conjunto de nodos, así que use:

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

Por ejemplo expresión:

count(//text()[normalize-space() = 'Alliance Consulting'])

contra el documento anterior se devolverá 3.

Para seleccionar nodos de texto que contienen 'Alliance Consulting'el valor de cadena completo (por ejemplo 'Alliance Consulting provides great services'), utilice:

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

Tenga en cuenta que los nodos de texto adyacentes deben convertirse en uno después de que el analizador llegue al documento.

Flack avatar Feb 22 '2011 07:02 Flack