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)]