Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307

    XPath: possibile effettuare una evaluate di una evaluate?

    Tramite il metodo evaluate della classe XPath, ottengo una lista di nodi.
    Su ognuno di essi, è poi possibile effettuare una successiva evaluate, passandogli come secondo parametro l'oggetto nodo, e come primo parametro una XPath expression relativa rispetto alla posizione del nodo stesso nel documento XML?
    Mi spiego meglio; ho un documento XML così fatto:

    codice:
    <lista-alberghi>
         <albergo classificazione = "3 stelle">
              <camere>5</camere>          
         </albergo>
         <albergo classificazione = "5 stelle">
              <camere>8</camere> 
         </albergo>
         <albergo classificazione = "2 stelle">
              <camere>6</camere> 
         </albergo>
    </lista-alberghi>
    Dopo aver ottenuto la NodeList dei nodi "albergo" con una

    codice:
    path.evaluate("/lista-alberghi", documentoXML, XPathConstants.NODESET)
    , ovviamente castata a NodeList e con path di tipo javax.xml.xpath.XPath, vorrei poi, ciclando sulla nodelist, per ogni nodo ottenere la classificazione ed il numero di camere con due successive evaluate:

    codice:
    String strClassificazione = path.evaluate("/albergo/@classificazione", mioNodo);
    String strNumCamere = path.evaluate("/albergo/camere", mioNodo);
    E' possibile?
    Se NON è possibile, come fareste voi, per ogni nodo "albergo", ad estrarre l'informazione sulla classificazione e sul numero di camere?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: XPath: possibile effettuare una evaluate di una evaluate?

    Originariamente inviato da natasha
    vorrei poi, ciclando sulla nodelist, per ogni nodo ottenere la classificazione ed il numero di camere con due successive evaluate:

    codice:
    String strClassificazione = path.evaluate("/albergo/@classificazione", mioNodo);
    String strNumCamere = path.evaluate("/albergo/camere", mioNodo);
    E' possibile?
    Certo, è possibile. Ma occhio al fatto che ora il "contesto" è quel nodo, quindi la espressione deve essere adeguata, perché altrimenti non ottieni il risultato voluto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307
    allora perchè non funziona?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da natasha
    allora perchè non funziona?
    Ma hai chiaro come funziona XPath? Ecco uno scenario di esempio (prendo per buono il XML che hai postato all'inizio).

    Potresti fare sul documento la seguente evaluate:

    codice:
    NodeList nodeList = (NodeList) xPath.evaluate("/lista-alberghi/albergo", tuoDocumento, XPathConstants.NODESET);
    Nota la espressione: "/" = documento, "lista-alberghi" = tag radice, "albergo" = tag primo sottolivello della radice.

    Il NodeList che ottieni ti fornirebbe dei Node che sono effettivamente, come oggetti, degli Element relativi ai tag <albergo>.

    Ora, per ogni nodo <albergo> (quindi usando questo nodo come "contesto") potresti fare la seguente evaluate:

    codice:
    String camere = xPath.evaluate("camere", nodoAlbergo);
    Nota anche qui la espressione: non inizia con "/" perché il contesto ora è <albergo>. La espressione fa scendere solo di un livello a <camere> e ne prende il testo contenuto.

    Ora è più chiaro? Spero.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307
    Originariamente inviato da natasha
    allora perchè non funziona?
    Perchè avevo commesso un errore banale: occorre fare una

    codice:
    path.evaluate("/lista-alberghi/albergo", documentoXML, XPathConstants.NODESET)
    per poi ciclare nel nodeset...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da natasha
    codice:
    path.evaluate("/lista-alberghi/albergo", documentoXML, XPathConstants.NODESET)
    Appunto lo scenario che ho descritto io sopra.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.