online node attribute xpath

node - xpath php



Verificación de XPath para nodo no existente (4)

Dado el ejemplo Xml de otra respuesta

<top> <function> <filenamex>c:/a/y/z/myFile.xml</filenamex> <default>Default.xml</default> </function> </top>

  • Para obtener los nodos CON el nodo "filenamex" use / top / function [filenamex]
  • Para obtener los nodos SIN el nodo "filenamex" use / top / function [not (filenamex)]

Sentí que era necesario responder aquí ya que las otras respuestas no funcionaron como se anuncia en XmlSpy

Estoy teniendo un poco de problemas para encontrar la sintaxis XPath correcta para verificar si existe un nodo en particular en mi XML. Solo se me permite usar XPath (así que no hay XSL o algo así, tiene que ser una sintaxis de expresión de XPath pura).

Tengo un XML y tiene un Filename nodo pero no existe en todos los casos. Cuando no se especifica el nombre de archivo, mi proceso de LiveCycle usará una ruta diferente para completar el nombre de archivo. Pero, ¿cómo compruebo si existe el nodo Filename ?


Puede usar la función de count , pasando la ruta de los nodos que está verificando.

Si no existen, entonces el valor de count será 0:

count(//Filename) = 0


Similar a contar pero tal vez más directa dependiendo de lo que desea es la función booleana

boolean(//Filename)

Esto devuelve verdadero si el nodo "Nombre de archivo" existe y falso si no.


Supongamos que tiene el siguiente documento XML :

<top> <function> <filenamex>c:/a/y/z/myFile.xml</filenamex> <default>Default.xml</default> </function> </top>

luego, esta expresión XPath selecciona el elemento de filename cuando está presente o el elemento default cuando no se especifica ningún elemento de filename :

(/*/function/filename | /*/function/default ) [1]

La forma más corta de verificar si el elemento de filename existe es :

/*/function/filename

Así que la primera expresión XPath podría reescribirse en el equivalente (pero algo más largo):

/*/function/filename | /*/function/default[not(/*/function/filename)]