|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
16-12-2005, 22.54.05 | #1 |
Senior Member
Registrato: 02-04-2003
Loc.: Roma
Messaggi: 313
|
[Java] Leggere file xml
Codice:
public String getParam(String paramname) { //get the root elememt Element docEle = dom.getDocumentElement(); String retparam = null; NodeList nl = docEle.getElementsByTagName("radice"); if(nl != null && nl.getLength() > 0) { for(int i = 0 ; i < nl.getLength();i++) { Element el = (Element)nl.item(i); retparam = getTextValue(el,paramname); } } return retparam; } public String getTextValue(Element ele, String tagName) { String textVal = null; NodeList nl = ele.getElementsByTagName(tagName); if(nl != null && nl.getLength() > 0) { Element el = (Element)nl.item(0); textVal = el.getFirstChild().getNodeValue(); } if(textVal.equals(null)) textVal = ""; return textVal; } File XML <?xml version="1.0" encoding="UTF-8"?> <radice> <driver_db>Valore</driver_db> <url_db>Valore</url_db> <user_db>Valore</user_db> <path_dest_xml>Valore</path_dest_xml> <tipo_db>Valore</tipo_db> </radice> |
17-12-2005, 02.04.15 | #2 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Domani gli do un'occhiata, ora rischio di dirti cacchiate
|
17-12-2005, 03.02.50 | #3 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Non ho sonno quindi rispondo
La variabile nl contiene zero elementi. Con Codice:
Element docEle = dom.getDocumentElement(); Codice:
System.out.println("Nome = " + docEle.getTagName()); Quindi ti basta fare una Codice:
NodeList nl = docEle.getElementsByTagName("*"); In pratica docEle è già ciò che cercavi ("radice"), quindi al suo interno non trovavi "radice" stesso |
17-12-2005, 12.41.01 | #4 |
Senior Member
Registrato: 02-04-2003
Loc.: Roma
Messaggi: 313
|
Ti ringrazio molto per l'aiuto, ho però ancora un problema facendo
docEle.getElementsByTagName("*"); non riesco poi a ciclare i vari figli, mi ritorna sempre un valore nullo, c'è un modo per avere accesso diretto ad un figlio della radice? |
17-12-2005, 14.10.01 | #5 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Se usi lo stesso codice che c'è sopra, è giusto che non funzioni. Questo perchè in nl hai la NodeList degli elementi figli di "radice", ovvero i cinque nodi con tag "driver_db",
"url_db", "user_db", "path_dest_xml", "tipo_db". Con il ciclo for nel metodo getParam() cicli su questi elementi e fin qui tutto bene. Poi però, per ognuno di questi elementi, in getTextValue() prendi ancora i figli e di questi cerchi di prendere il valore: è qua l'errore, poichè questi cinque elementi non hanno figli. Il metodo getElementsByTagName() prende già tutti gli elementi con un determinato nome (o tutti senza distinzione se si passa "*"), indipendentemente dalla profondità a cui si trovano E' in pratica un modo per creare una lista piatta di elementi, senza dover scrivere un metodo ricorsivo che fa una visita completa dell'albero. Se per esempio nel tuo file xml aggiungi ad uno qualsiasi degli elementi alcuni elementi figli, e controlli il valore di nl.getLength(), vedi che questo è incrementato proprio del numero di elementi figli che hai aggiunto. |
17-12-2005, 16.32.35 | #6 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Per dire, io scriverei questo codice:
Codice:
public static String[] getParam(String tagName, File file) throws org.xml.sax.SAXException, IOException, javax.xml.parsers.ParserConfigurationException { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document dom = db.newDocument(); //costruisco il documento dom = db.parse(file); NodeList nl = dom.getElementsByTagName(tagName); String[] result = new String[nl.getLength()]; for(int i = 0; i < nl.getLength(); i++) { result[i] = nl.item(i).getFirstChild().getNodeValue(); } return result; } Così eviti di prenderti tutti gli elementi che non ti servono, e ti pigli solo quello che ti interessa (ovviamente il file viene ugualmente parsato tutto in preorder). Ho messo un array di String (o un Vector, lì va a gusti e casi specifici) così il metodo è un po' più generico: se in un file hai due o più elementi con lo stesso nome, ti vengono restituiti i valori di tutti questi elementi, e non solo di uno a caso |
17-12-2005, 17.43.08 | #7 |
Senior Member
Registrato: 02-04-2003
Loc.: Roma
Messaggi: 313
|
Io ho trovato un'altra soluzione, la quale senza cicli cattura l'element di interesse, qualsiasi sia il suo livello nell'alberatura dell'xml, secondo te può essere la mia una buona soluzione?
Codice:
public String getElement(String paramname)throws Exception { String retparam = null; Element docEle = dom.getDocumentElement(); NodeList nl = docEle.getElementsByTagName(paramname); Element el = (Element)nl.item(0); retparam = el.getFirstChild().getNodeValue(); return retparam; } |
17-12-2005, 18.00.35 | #8 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
E' quasi pari alla mia, solo senza cicli e escludendo dagli elementi presi in considerazione quello radice.
Se sei sicuro a priori che il file xml abbia, fra gli elementi che ti interessano, tutti elementi con tag differenti (come in questo caso, perchè il file xml lo fai tu, almeno penso), e che tu non debba prendere in esame l'elemento radice, va benissimo (Y) |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
Norman Malware Cleaner - AIUTO | sikano | Sicurezza&Privacy | 7 | 11-04-2008 16.28.32 |
Virus o danni al registro? | Eccomi | Sicurezza&Privacy | 21 | 23-05-2005 09.48.08 |
Dvd Pioneer 107 | pacixone | Masterizzazione Giochi Games | 7 | 25-03-2005 14.10.00 |
problema con file .doc rovinato in office xp 2003...poi risolto... | cippico | Office suite | 0 | 30-04-2004 09.12.07 |
Windows file protection:guida | Deuced | Windows 9x/Me/NT4/2000 | 7 | 16-03-2004 08.25.28 |