|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1726
|
leggere più valori con Xpath
Sto cercando di leggere dei dati con Xpath da un file xml.
Riesco a leggere il primo tag, invece poi se tento di leggerne un altro, mi dà eccezione ![]() File xmlDocument = new File("c:/test.xml"); ... InputSource inputSource = new InputSource(new FileInputStream(xmlDocument)); ... XPathFactory factory = XPathFactory.newInstance(); XPath xPath = factory.newXPath(); ... int replication = Integer.parseInt(xPath.evaluate("/simulation/setup/replication", inputSource)); System.out.println(replication); // FUNZIONA! warmuptime = Integer.parseInt(xPath.evaluate("/simulation/setup/warmuptime", inputSource)); System.out.println(warmuptime); // NON FUNZIONA!: mi dà javax.xml.xpath.XPathExpressionException
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Riesci a fare una prova di chiamata al metodo evaluate() usando un nodo DOM invece di un InputSource che si appoggia su uno stream?
Non vorrei che lo stream degli eventi sia stato consumato, per cui e' impossibile effettuare la seconda query.... Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1726
|
Quote:
Hai per caso un buon link a una guida per Xpath (su java) che possibilmente non si metta a parlare anche di Sax e Dom? thanks
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Quando hai provato a fare il reset, quando hai effttuato il corrispondente mark()? E con che valore di limite di invalidazionde del mark? occhio che il valore e' in byte e che se viene superato il mark viene invalidato.
Non e' che il problema sia l'xpath stesso e che La classe Xpath che stai usando e' quella della JDK, che si basa pesantemente sulla API JAXP/TRAX. Di conseguenza DOM e SAX sono importanti..... In alternativa potresti provare dom4j, e' un API per parsing XML che supporta anche xpath, piu' semplice da usare, comunque e' un .jar a parte e non e' uno standard. Ma se inverti i 2 xpath, quello che legge warmuptime funziona?
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1726
|
Facendo così ora sembra andare:
Codice PHP:
sicuramente non è la soluzione giusta al problema, per ora però mi accontento, se hai idee migliori son benvenute ![]()
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
Codice:
// parse the XML as a W3C Document DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); org.w3c.Document document = builder.parse(new File("/widgets.xml")); // evaluate the XPath expression against the Document XPath xpath = XPathFactory.newInstance().newXPath(); String expression = "/widgets/widget[@name='a']/@quantity"; Double quantity = (Double) xpath.evaluate(expression, document, XPathConstants.NUMBER);
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1726
|
Quote:
Il codice da te postato ha l'aria di essere copia/incollato, potresti darmi il link da dove l'hai preso? Un casino di Java, XML e XPath è che su internet si trovano un sacco di cose spesso troppo complesse rispetto le mie esigenze e spesso guide e codici che fanno rifermimento a vecchie versioni di Java dove venivano usate "librerie esterne" per elaborare i file .xml. Comunque ero riuscito a far funzionare anche il mio codice con l'ultima versione, l'unico problema che aveva è che a ogni "evaluate" dell'xpath dovevo ri-definire l'inputsource con l'istruzione: Codice PHP:
E vedo il file .xml come una sorta di database. Vorrei quindi letto una volta il file .xml e definito come input poi poter fare interrogazioni tramite Xpath per estrarre in variabili le informazioni che mi servono
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. |
|
![]() |
![]() |
![]() |
#8 | ||
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
Quote:
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
||
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1726
|
Quote:
In pratica anche il mio codice funzionava per leggere il primo valore tramite XPath Poi però per leggere il secondo valore mi toccava ricaricare l'inputsource. Quindi ti domando, il tuo codice funzionerebbe direttamente così?? (per estrarre quantity1 e quantity2) Codice PHP:
thanks
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
Ti confesso che questa tecnica non l'ho mai provata con XPath, ma da quello che conosco del framework java per XML ti dico: provare per credere (in fondo molto dipende anche dalla specifica implementazione del parser XML che utilizzi).
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1726
|
Quote:
Comunque non ho necessità di prestazioni sul parsing dell'XML, mi basta solo leggere dei dati, elaborare e creare alla fine un XML con i risultati. la parte dove servirebbe efficienza è l'elaborazione, per il resto non ho problemi di prestazioni, e proprio per quello cerco la semplicità di programmazione (che xpath sembra offrire) ciao
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Va bene usare xpath.
Se costruisci il document come nel pezzo di codice che ti ha postato Angus, poi lo puoi usare nell'evaluate dell'xpath. Alla fine il codice dovrebbe essere + o - questo (in neretto i cambiamenti rispetto al tuo codcie originale) Codice:
File xmlDocument = new File("c:/test.xml"); ... // parse the XML as a W3C Document DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); org.w3c.Document document = builder.parse(xmlDocument); ... XPathFactory factory = XPathFactory.newInstance(); XPath xPath = factory.newXPath(); ... int replication = Integer.parseInt(xPath.evaluate("/simulation/setup/replication", document)); System.out.println(replication); // FUNZIONA! warmuptime = Integer.parseInt(xPath.evaluate("/simulation/setup/warmuptime", document)); System.out.println(warmuptime); // NON FUNZIONA!: mi dà javax.xml.xpath.XPathExpressionException Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:32.