XPath controllare per non esistente nodo

Im avendo un po ‘ di problemi a trovare la giusta sintassi XPath per verificare se un determinato nodo nel mio XML esiste. Mi sono solo permesso di usare XPath (quindi non XSL o qualcosa del genere, non deve essere una pura espressione XPath sintassi).

Ho un XML e ha un nodo Filename, ma non esiste in ogni caso. Quando il nome del file non è specificato, il mio LiveCycle proces utilizzare un percorso diverso, compilare il nome del file. Ma come faccio a controllare se il Filename nodo esiste?

  • Buona domanda (+1). Vedi la mia risposta per una spiegazione e per un breve single espressione XPath che seleziona il nome del file o il valore di default, nel caso in cui il nome del file è mancante. 🙂
InformationsquelleAutor Ronny176 | 2010-07-23

 

4 Replies
  1. 16

    È possibile utilizzare il conte funzione di passaggio nel percorso di nodi che si sta controllando.

    Se non esiste, allora il valore di count sarà 0:

    count(//Filename) = 0
  2. 15

    Simile a conte, ma forse più diretto, a seconda di ciò che si vuole è la funzione boolean

    boolean(//Filename)

    Restituisce vero se “Filename” nodo esiste e false se non.

    • È possibile negare il risultato restituito? Qualcosa di simile ! boolean(...)
    • Un po ‘ criptico intento, però, eh?
  3. 10

    Si supponga di avere la seguente documento XML:

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

    quindi questa espressione XPath seleziona le filename elemento quando è presente, il default elemento quando non filename elemento è specificato:

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

    La strada più breve per verificare se il filename elemento esiste è:

    /*/function/filename

    Così la prima espressione XPath potrebbe essere ri-scritto, l’equivalente (ma un po ‘ di più):

     /*/function/filename
    |
     /*/function/default[not(/*/function/filename)]
  4. 7

    Dato l’esempio di codice Xml da un’altra risposta

    <top>
      <function>
        <filenamex>c:\a\y\z\myFile.xml</filenamex>
        <default>Default.xml</default>
      </function>
    </top>
    • Per ottenere i nodi CON il nodo “filenamex” uso /in alto/funzione[filenamex]
    • Per ottenere nodo SENZA nodo “filenamex” uso /in alto/funzione[non(filenamex)]

    Ho ritenuto necessario rispondere qui come le altre risposte non funziona come pubblicizzato in XmlSpy

Lascia un commento