xslt - node - xpath encuentra si el nodo existe
xpath php (6)
Patrick es correcto, tanto en el uso de xsl:if
, como en la sintaxis para verificar la existencia de un nodo. Sin embargo, como lo indica la respuesta de Patrick, no hay xsl equivalente a if-then-else, por lo que si está buscando algo más parecido a if-then-else, normalmente es mejor usar xsl:choose
xsl:otherwise
y xsl:otherwise
else. Entonces, la sintaxis de ejemplo de Patrick funcionará, pero esta es una alternativa:
<xsl:choose>
<xsl:when test="/html/body">body node exists</xsl:when>
<xsl:otherwise>body node missing</xsl:otherwise>
</xsl:choose>
Usando una consulta xpath, ¿cómo encuentra si existe un nodo (etiqueta)?
Por ejemplo, si necesito asegurarme de que una página web tenga la estructura básica correcta como / html / body y / html / head / title
Podría ser mejor usar una opción, no tiene que escribir (o mal escribir) sus expresiones más de una vez, y le permite seguir comportamientos diferentes adicionales.
Muy a menudo 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.
<xsl:choose>
<xsl:when test="/html/body">
<!-- Found the node(s) -->
</xsl:when>
<!-- more xsl:when here, if needed -->
<xsl:otherwise>
<!-- No node exists -->
</xsl:otherwise>
</xsl:choose>
Pruebe la siguiente expresión: boolean(path-to-node)
Trabajo en Ruby y, utilizando Nokogiri, busco el elemento y veo si el resultado es nulo.
require ''nokogiri''
url = "http://somthing.com/resource"
resp = Nokogiri::XML(open(url))
first_name = resp.xpath("/movies/actors/actor[1]/first-name")
puts "first-name not found" if first_name.nil?
Una variación cuando se usa xpath en Java usando count ():
int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc));
if( numberofbodies==0) {
// body node missing
}
<xsl:if test="xpath-expression">...</xsl:if>
así por ejemplo
<xsl:if test="/html/body">body node exists</xsl:if>
<xsl:if test="not(/html/body)">body node missing</xsl:if>