2010-07-23 8 views
15

J'ai un peu de mal à trouver la bonne syntaxe XPath pour vérifier si un nœud particulier de mon XML existe. Je suis seulement autorisé à utiliser XPath (donc pas de XSL ou autre chose comme ça, ça doit être une pure syntaxe d'expression XPath).Vérification XPath pour un nœud inexistant

J'ai un XML et il a un noeud Filename mais il n'existe pas dans tous les cas. Lorsque le nom de fichier n'est pas spécifié, mon processus LiveCycle utilise une route différente pour remplir le nom de fichier. Mais comment puis-je vérifier si le noeud Filename existe?

+0

Bonne question (+1). Voir ma réponse pour une explication et pour une courte expression XPath simple qui sélectionne le nom de fichier ou la valeur par défaut, dans le cas où le nom de fichier est manquant. :) –

Répondre

14

Vous pouvez utiliser la fonction count - en passant le chemin des nœuds que vous vérifiez.

Si elles n'existent pas, alors la valeur de count sera 0:

count(//Filename) = 0 
8

Supposons que vous ayez le document XML suivant:

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

alors cette expression XPath sélectionne l'élément filename lorsqu'il est présent ou l'élément default lorsque aucun élément filename n'est spécifié:

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

Le chemin le plus court pour vérifier si l'élément filename existe est:

/*/function/filename

La première expression XPath pourrait être réécrite dans le équivalent (mais un peu plus) :

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

Similaire à compter mais peut-être plus direct en fonction de ce que vous voulez est la fonction booléenne

boolean(//Filename)

Cela revient vrai si « Nom du fichier » noeud existe et faux sinon.

+0

Est-il possible d'annuler le résultat renvoyé? Quelque chose comme '! boolean (...) '... – Aerendir

+0

Intention quelque peu cryptique cependant, hein? –

5

Étant donné l'exemple Xml d'une autre réponse

<top> 
    <function> 
    <filenamex>c:\a\y\z\myFile.xml</filenamex> 
    <default>Default.xml</default> 
    </function> 
</top> 
  • Pour obtenir des noeuds avec le noeud "filenamex" utilisation/haut/fonction [filenamex]
  • Pour obtenir des noeuds utilisation/haut, sans noeud "filenamex"/fonction [non (filenamex)]

je me sentais nécessaire de répondre ici que les autres réponses ne fonctionnent pas comme annoncé dans XMLSpy

Questions connexes