2015-04-09 6 views
5

Questo è il mio documento XML:posso usare la funzione current() in XPath, al di fuori di XSLT?

<root> 
    <bad> 
    <id>13</id> 
    <id>27</id> 
    </bad> 
    <books> 
    <book id='5'/> 
    <book id='7'/> 
    <book id='13'/> 
    </books> 
</root> 

Ora sto cercando di selezionare tutti i libri che non sono "cattivi":

/root/books/book[not(/root/bad/id[[email protected]()/@id])] 

Questo non funziona. Sto ricevendo tutti i libri, mentre il libro n. 13 dovrebbe essere escluso. Non è XSLT. È solo una richiesta XPath (io sono con Java). Cosa c'è che non va?

+0

Si noti che anche se current() ha funzionato, e anche se si è rimosso il falso "@", si darebbe la risposta sbagliata. In XSLT current() si riferisce sempre all'elemento di contesto per l'espressione XPath nel suo insieme, che in questo caso è (probabilmente) il nodo del documento, mentre si sta cercando l'elemento di contesto "un livello su", cioè, il libro corrente. –

risposta

5

La funzione current() è supportata solo da XSLT. Ma non c'è bisogno di usare current() qui. È possibile ottenere il risultato desiderato con la seguente espressione:

/root/books/book[not(@id=/root/bad/id)] 
Problemi correlati