Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-07-2011, 12:16   #1
Xfree
Senior Member
 
L'Avatar di Xfree
 
Iscritto dal: Aug 2001
Messaggi: 9538
[JAVA+XML] Lettura del valore dei nodi

Ciao a tutti.
Vorrei riuscire a stampare a video tutti i nodi, a partire da un determinato nodo, ed il relativo valore, da un file XML così formato

Codice:
<?xml version="1.0" encoding="UTF-8"?>
<ResultSet version="1.0">
    <Error>0</Error>
    <ErrorMessage>Nessun errore</ErrorMessage>
    <Locale>it_IT</Locale>
    <Quality>87</Quality>
    <Found>1</Found>
    <Result>
        <quality>72</quality>
        <latitude>38.095540</latitude>
        <longitude>13.463119</longitude>
        <offsetlat>38.095540</offsetlat>
        <offsetlon>13.463119</offsetlon>
        <radius>500</radius>
        <name></name>
        <line1>contrada Badia</line1>
        <line2>90010 Ficarazzi PA</line2>
        <line3></line3>
        <line4>Italia</line4>
        <house></house>
        <street>contrada Badia</street>
        <xstreet></xstreet>
        <unittype></unittype>
        <unit></unit>
        <postal>90010</postal>
        <neighborhood></neighborhood>
        <city>Ficarazzi</city>
        <county>Palermo</county>
        <state>Sicilia</state>
        <country>Italia</country>
        <countrycode>IT</countrycode>
        <statecode></statecode>
        <countycode>PA</countycode>
        <uzip>90010</uzip>
        <hash></hash>
        <woeid>12847749</woeid>
        <woetype>11</woetype>
    </Result>
</ResultSet>
In particolare mi interessano i tutti i nodi ed i relativi valori compresi tra <Result> e </Result>
Ho scritto in java il seguente programma che dovrebbe occuparsi del parsing del file XML
Codice:
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;

public class xml_2 {
	public static void main (String [] args) {
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			factory.setValidating(false);
			Document doc = factory.newDocumentBuilder().parse(new File("file.xml"));
			
			NodeList list = doc.getElementsByTagName("Result");
			for (int i = 0; i < list.getLength(); i++) {
				Node node = list.item(i);
				NodeList children =  node.getChildNodes();
				for (int j = 0; j < children.getLength(); j++) {
					Element el = (Element)children.item(j);
					System.out.println(el.getNodeName()+" : "+children.item(j).getNodeValue());
				}
			}
		} catch (Exception e) {
		}
	}
}
Il problema è che ottengo tutti i nodi figli di Result, però con valore null, come se non riuscissi a prenderne il valore.
Codice:
quality : null
latitude : null
longitude : null
offsetlat : null
offsetlon : null
radius : null
name : null
line1 : null
line2 : null
line3 : null
line4 : null
house : null
street : null
xstreet : null
unittype : null
unit : null
postal : null
neighborhood : null
city : null
county : null
state : null
country : null
countrycode : null
statecode : null
countycode : null
uzip : null
hash : null
woeid : null
woetype : null
Dove sto sbagliando?
Xfree è offline   Rispondi citando il messaggio o parte di esso
Old 21-07-2011, 15:15   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Usa il metodo getTextContent al posto di getNodeValue.
Codice:
...
for (int j = 0; j < children.getLength(); j++) {
    Node n = children.item(j);
    if (n.getNodeType() == Node.ELEMENT_NODE) {
        Element e = (Element)n;
        System.out.println(e.getNodeName()+" : "+e.getTextContent());
    }
}
...
Codice:
quality : 72
latitude : 38.095540
longitude : 13.463119
offsetlat : 38.095540
offsetlon : 13.463119
radius : 500
name : 
line1 : contrada Badia
line2 : 90010 Ficarazzi PA
line3 : 
line4 : Italia
house : 
street : contrada Badia
xstreet : 
unittype : 
unit : 
postal : 90010
neighborhood : 
city : Ficarazzi
county : Palermo
state : Sicilia
country : Italia
countrycode : IT
statecode : 
countycode : PA
uzip : 90010
hash : 
woeid : 12847749
woetype : 11
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 21-07-2011, 16:16   #3
Xfree
Senior Member
 
L'Avatar di Xfree
 
Iscritto dal: Aug 2001
Messaggi: 9538
Grazie mille.
Xfree è offline   Rispondi citando il messaggio o parte di esso
Old 21-07-2011, 17:56   #4
Xfree
Senior Member
 
L'Avatar di Xfree
 
Iscritto dal: Aug 2001
Messaggi: 9538
Posso chiederti un'altra cosa?
Per visualizzare il valore di un determinato tag, come si fa?
Ho cercato e mi è sembrato si potesse fare così

Codice:
...
for (int j = 0; j < children.getLength(); j++) {
    Node n = children.item(j);
        if (n.getNodeType() == Node.ELEMENT_NODE) {
            Element e = (Element) children.item(j);
            String street = e.getElementsByTagName("street").item(0).getTextContent();
            System.out.println(street);
        }
}
...
Però non ottengo nulla.
Xfree è offline   Rispondi citando il messaggio o parte di esso
Old 22-07-2011, 08:40   #5
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Non ottieni nulla perchè parti dal nodo sbagliato, nel tuo codice invochi getElementsByTagName direttamente sul nodo "street", cercando un figlio di nome "street", ecco perchè.
Ecco un esempio:
Codice:
...
public static void main (String [] args) {
    try {
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setValidating(false);
        Document doc = factory.newDocumentBuilder().parse(new File("fileXML.xml"));

        NodeList resultList = doc.getElementsByTagName("Result");
        for (int i = 0; i < resultList.getLength(); i++) {
            Node result = resultList.item(i);
            printNodesByType(result, Node.ELEMENT_NODE);
            System.out.println("---------------");
            printNodeByName(result, "street");
            printNodeByName(result, "city");
            printNodeByName(result, "county");
        }
    } catch (Exception e) {
        System.out.println("Something wrong...");
        e.printStackTrace();
    }
}

private static void printNodesByType(Node parent, short nodeType) {
    NodeList children =  parent.getChildNodes();
    for (int j = 0; j < children.getLength(); j++) {
        Node n = children.item(j);
        if (n.getNodeType() == nodeType) {
            Element e = (Element)n;
            System.out.println(e.getNodeName()+" : "+e.getTextContent());
        }
    }
}

private static void printNodeByName(Node parent, String childName) {
    Element e = (Element)parent;
    NodeList list = e.getElementsByTagName(childName);
    if (list.getLength() > 0) {
        System.out.println(childName+" : "+list.item(0).getTextContent());
    }
}
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 22-07-2011, 11:51   #6
Xfree
Senior Member
 
L'Avatar di Xfree
 
Iscritto dal: Aug 2001
Messaggi: 9538
Quindi avrei dovuto invocarlo nel ciclo principale e non nel ciclo innestato.
Grazie mille.
Xfree è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
Xiaomi Redmi Note 17 a 269€: ecco perch&...
ASUS avverte i clienti: accesso non auto...
Già record di vendite su Amazon p...
Eni mette un tetto ai prezzi dei carbura...
BYD Seagull (Dolphin Surf), l'elettrica ...
Multa milionaria per un data center del ...
F-Droid 2.0 si aggiorna con una nuova gr...
Microsoft ridisegna Copilot: dalla chat ...
Volkswagen porterà 20 videogiochi...
Troppa IA storpia: OpenAI licenzia in tr...
Marathon, Bungie svela i contenuti dell'...
Autunno, tempo di potature: i tagliasiep...
Meta Muse, due sviluppatori riescono a o...
Google AI Pro gratis: festa a sorpresa p...
MacSync colpisce macOS usando i calendar...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:43.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v