Usando una consulta xpath, ¿cómo encuentra si existe un nodo (etiqueta)?
Por ejemplo, si necesitaba asegurarme de que la página de un sitio web tenga la estructura básica correcta como / html / body y / html / head / title
xslt
xpath
expression
EddyR
fuente
fuente

Respuestas:
así por ejemplo
fuente
html/body and not(html/body/node())(es decir, simplemente pruebe si existe y no contiene ningún nodo secundario o nodo de texto).Pruebe la siguiente expresión:
boolean(path-to-node)fuente
Patrick tiene razón, tanto en el uso de
xsl:if, como en la sintaxis para verificar la existencia de un nodo. Sin embargo, como implica la respuesta de Patrick, no hay un equivalente xsl de if-then-else, por lo que si está buscando algo más como if-then-else, normalmente es mejor usarxsl:chooseyxsl:otherwise. Entonces, la sintaxis de ejemplo de Patrick funcionará, pero esta es una alternativa:fuente
if-then-else, ¿y qué pasa tambiénif-else if-else? En la respuesta de davenpcj, ¿puedo colocartest="somexpath"en el segundo cuándo hacerloif-else if-else?Podría ser mejor usar una opción, no tiene que escribir (o posiblemente escribir mal) sus expresiones más de una vez, y le permite seguir comportamientos diferentes adicionales.
A menudo lo uso
count(/html/body) = 0, ya que el número específico de nodos es más interesante que el conjunto. Por ejemplo ... cuando hay inesperadamente más de 1 nodo que coincide con su expresión.fuente
count(/html/body) = 0genio! : DI lo uso/html[count(/body)=0]/someNodepara seleccionarsomeNodecuándo/bodyfalta (o lo que sea)/html[count(/body)=0]nunca seleccionará nada, no puede haber dos nodos raíz en XML. Quizás quisiste decir/html[count(body)=0], que sería lo mismo que/html[not(body)], o/html[not(exists(body))].Trabajo en Ruby y usando Nokogiri busco el elemento y miro para ver si el resultado es nulo.
fuente
Una variación al usar xpath en Java usando count ():
fuente