Telefonino.net network
 
| 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 » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 16-12-2005, 22.54.05   #1
GiulioCesare
Senior Member
 
L'avatar di GiulioCesare
 
Registrato: 02-04-2003
Loc.: Roma
Messaggi: 313
GiulioCesare promette bene
[Java] Leggere file xml

Salve ragazzi, sto cercando di leggere un file xml, tramite java, ma ho dei problemi, ho fatto due metodi che leggono dalla radice del file, ed a secondo dell'element che viene passato leggono il relativo valore, però invece di ritornare il valore giusto, ritorna un valore nullo. Posto di seguito i due metodi che ho fatto, e poi il mio file xml da leggere, con la speranza che qualcuno mi aiuti
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>
GiulioCesare non è collegato   Rispondi citando
Vecchio 17-12-2005, 02.04.15   #2
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Domani gli do un'occhiata, ora rischio di dirti cacchiate
Dav82 non è collegato   Rispondi citando
Vecchio 17-12-2005, 03.02.50   #3
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Non ho sonno quindi rispondo


La variabile nl contiene zero elementi.
Con
Codice:
Element docEle = dom.getDocumentElement();
prendi l'elemento radice del tuo file xml, che si chiama proprio "radice"... puoi verificarlo facendo

Codice:
System.out.println("Nome = " + docEle.getTagName());

Quindi ti basta fare una

Codice:
NodeList nl = docEle.getElementsByTagName("*");
per prendere tutti i figli di "radice" e poi ci fai quel che vuoi

In pratica docEle è già ciò che cercavi ("radice"), quindi al suo interno non trovavi "radice" stesso
Dav82 non è collegato   Rispondi citando
Vecchio 17-12-2005, 12.41.01   #4
GiulioCesare
Senior Member
 
L'avatar di GiulioCesare
 
Registrato: 02-04-2003
Loc.: Roma
Messaggi: 313
GiulioCesare promette bene
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?
GiulioCesare non è collegato   Rispondi citando
Vecchio 17-12-2005, 14.10.01   #5
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
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.

Dav82 non è collegato   Rispondi citando
Vecchio 17-12-2005, 16.32.35   #6
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
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
Dav82 non è collegato   Rispondi citando
Vecchio 17-12-2005, 17.43.08   #7
GiulioCesare
Senior Member
 
L'avatar di GiulioCesare
 
Registrato: 02-04-2003
Loc.: Roma
Messaggi: 313
GiulioCesare promette bene
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;
}
GiulioCesare non è collegato   Rispondi citando
Vecchio 17-12-2005, 18.00.35   #8
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
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)
Dav82 non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

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

Orario GMT +2. Ora sono le: 10.14.30.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.