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:choose
yxsl: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) = 0
genio! : DI lo uso/html[count(/body)=0]/someNode
para seleccionarsomeNode
cuándo/body
falta (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