XML Parsen JDOM NullPointerEcxeption

MarkusKirch

Mitglied
Hey Leute!
Ich versuche, dieses XML File mit täglich aktuellen Währungskursen einzulesen in 2 Arrays, eins mit dem Namen der Währung und eins mit dem zugehörigen Wert (zugeordnet über einen Counter i)!
Habe folgenden Code geschrieben, müsste soweit laufen, allerdings bekomme ich immer eine NullPointerException in der Zeile 37:
[JAVA=37]alleWaehrungen=root.getChild("Cube").getChild("Cube").getChildren();[/code]
Ich denke, das liegt daran, dass ich alleWaehrungen nicht explizit erzeugt habe, aber wie macht man das?
Wisst ihr vllt, woran es liegt, bzw wie ich den Fehler umgehen kann?

VG und Danke für die Hilfe

Markus

Java:
//Importe
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class waehrungsRechner{ //Klasse fängt an
	//Deklarationen
	private String[] waehrungsName;
	private String[] waehrungsKurs;
	private String Datum;
	private String aktuellerWaehrungsName;
	private String aktuellerWaehrungsKurs;
	private SAXBuilder builder;
	private Document doc;
	private Element root;
	private List<?> alleWaehrungen;
	
	public void readxml(){ //XML auslesen Funktion
		try {
			//Erzeugungen
			SAXBuilder builder=new SAXBuilder();
			Document doc=new Document();
			doc = builder.build("http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml");
			Element root=new Element("root");
			root=doc.getRootElement();
			List<?> alleWaehrungen=new ArrayList();
			alleWaehrungen=root.getChild("Cube").getChild("Cube").getChildren();//Hinzufügen der <Cube currency="Währung" rate="1.00"> Tags in die Liste

			[...]

	 	} catch (JDOMException e) {
	 		e.printStackTrace();
	 	} catch (IOException e) {
	 		e.printStackTrace();
	 	}
	}
}
 

eRaaaa

Top Contributor
Naja, was soll man dir jetzt viel sagen? Du hast ja nicht einmal die XML Datei gepostet. Klar ist, dass getChild null zurück liefert wenn das Kind nicht gefunden werden kann , siehe JDOM v1.1.1
D.h. wahrscheinlich der Pfad passt nicht, hast du wirklich eine Hierarchie alà <Child>...<Child>...<Child></Child></Child> ?
 

eRaaaa

Top Contributor
Ich dachte eigentlich, man könnte die Datei aus dem Code lesen...

Oh ja sorry, habe ich übersehen, dass dort zu einer externen URL gelinkt wurde!
Dein Namespace passt dort nicht, für Cube lautet dieser ja :http://www.ecb.int/vocabulary/2002-08-01/eurofxref daher findet der das Kind so auch nicht, probiere mal:
Java:
          Namespace ns = Namespace.getNamespace("http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
          alleWaehrungen=root.getChild("Cube", ns).getChild("Cube", ns).getChildren();
 

MarkusKirch

Mitglied
Vielen Dank, das hat funktioniert, aber nun habe ich den selben Fehler in der Zeile 47.
Im Debug Mode ist aktuellerWaehrungsName=null, also nimmt er entweder den "else" Weg oder findet kein Attribut rate...
Könnt ihr mir bitte nochmal helfen, ich weiß wirklich nicht mehr weiter!

Vielen Dank

Markus


Java:
public class waehrungsRechner{
	private Attribute[] waehrungsName;
	private Attribute[] waehrungsKurs;
	private String Datum;
	private Attribute aktuellerWaehrungsName;
	private Attribute aktuellerWaehrungsKurs;
	private int i;
	SAXBuilder builder;
	Document doc;
	Element root;
	List<?> alleWaehrungen;
	
	public void readxml(){
		try {
			SAXBuilder builder=new SAXBuilder();
			Document doc=new Document();
			doc = builder.build("http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml");
			Element root=new Element("root");
			root=doc.getRootElement();
			Namespace ns = Namespace.getNamespace("http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
			alleWaehrungen=root.getChild("Cube", ns).getChild("Cube", ns).getChildren();
			for(i=0;i<alleWaehrungen.size();i++){
				if( ((Element) alleWaehrungen.get(i)).getChild("Cube", ns)!=null){
					aktuellerWaehrungsName=((Element) alleWaehrungen.get(i)).getAttribute("currency");
				}else{
					aktuellerWaehrungsName=null;
				}
				
				if( ((Element) alleWaehrungen.get(i)).getChild("Cube", ns)!=null){
					aktuellerWaehrungsKurs=((Element) alleWaehrungen.get(i)).getAttribute("rate");
				}else{
					aktuellerWaehrungsKurs=null;
				}
				
				//System.out.println(aktuellerWaehrungsName);
				//System.out.println(aktuellerWaehrungsKurs);
				
				waehrungsName[i]=(Attribute) aktuellerWaehrungsName;
				waehrungsKurs[i]=(Attribute) aktuellerWaehrungsKurs;
			}
			for(i=0;i<waehrungsName.length;i++) {
				System.out.println(waehrungsName[i]);
				System.out.println(waehrungsKurs[i]);
				System.out.println("");
			}
	 	} catch (JDOMException e) {
	 		e.printStackTrace();
	 	} catch (IOException e) {
	 		e.printStackTrace();
	 	}
	}
}
 

eRaaaa

Top Contributor
Java:
import java.io.IOException;
import java.util.List;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;

public class waehrungsRechner {
	private Attribute[] waehrungsName;
	private Attribute[] waehrungsKurs;
	private String Datum;
	private Attribute aktuellerWaehrungsName;
	private Attribute aktuellerWaehrungsKurs;
	private int i;
	SAXBuilder builder;
	Document doc;
	Element root;
	List<?> alleWaehrungen;

	public void readxml() {
		try {
			SAXBuilder builder = new SAXBuilder();
			Document doc = new Document();
			doc = builder
					.build("http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml");
			Element root = new Element("root");
			root = doc.getRootElement();
			Namespace ns = Namespace
					.getNamespace("http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
			alleWaehrungen = root.getChild("Cube", ns).getChild("Cube", ns)
					.getChildren();
			waehrungsName = new Attribute[alleWaehrungen.size()];
			waehrungsKurs = new Attribute[alleWaehrungen.size()];
			for (i = 0; i < alleWaehrungen.size(); i++) {
				if (alleWaehrungen.get(i) != null) {
					aktuellerWaehrungsName = ((Element) alleWaehrungen.get(i))
							.getAttribute("currency");
				} else {
					aktuellerWaehrungsName = null;
				}

				if (alleWaehrungen.get(i) != null) {
					aktuellerWaehrungsKurs = ((Element) alleWaehrungen.get(i))
							.getAttribute("rate");
				} else {
					aktuellerWaehrungsKurs = null;
				}

				waehrungsName[i] = (Attribute) aktuellerWaehrungsName;
				waehrungsKurs[i] = (Attribute) aktuellerWaehrungsKurs;
			}
			for (i = 0; i < waehrungsName.length; i++) {
				System.out.println(waehrungsName[i]);
				System.out.println(waehrungsKurs[i]);
				System.out.println("");
			}
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

a) du musst die Arrays natürlich erst einmal noch erstellen mit new ! (siehe 35 und 36)
b) du hast ja schon Cibe+Cube selektiert und wenn du dann getChildren aufrufst, erhälst du ja schon eine Liste mit den dritten Cubes quasi, daher musst du die if-Abfragen nicht noch einmal getChild aufrufen!
 
Zuletzt bearbeitet:

MarkusKirch

Mitglied
Hey!
Vielen Dank!
Jetzt läuft es super!
Ich bekomme ausgegeben:

Code:
[Attribute: currency="USD"]
[Attribute: rate="1.4130"]

[Attribute: currency="JPY"]
[Attribute: rate="114.68"]

[Attribute: currency="BGN"]
[Attribute: rate="1.9558"]

[Attribute: currency="CZK"]
[Attribute: rate="24.388"]

[Attribute: currency="DKK"]
[Attribute: rate="7.4568"]

[Attribute: currency="GBP"]
[Attribute: rate="0.87380"]

[Attribute: currency="HUF"]
[Attribute: rate="273.35"]

[...]

Mein Problem ist jetzt, dass ich aus den Attributen einen String bzw ein Double machen möchte.
Also meine hoffentlich letzte Frage zu diesem Thema:
Wie kann ich das Attribut waehrungsName in einen String konvertieren, der "USD" beinhaltet und wie kann ich das Attribut waehrungsKurs in ein Double konvertieren, das "1.4130" beinhaltet?

VG Markus
 
Zuletzt bearbeitet von einem Moderator:

MarkusKirch

Mitglied
Ok, habe es selbst herausgefunden, hier die Lösung:
getAttributeValue() liefert den Wert des Attribut, kann man sich ja auch denken...


Vielen Dank für deine Hilfe, eRaaaa!!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Parsen einer XML mit JDOM ohne Doctype Declaration XML & JSON 2
MiMa Buch Metadaten aus XML Datei parsen XML & JSON 48
S XML Document Parsen und Ausgeben mit Suchfunktion XML & JSON 21
M parsen von realen HTML-WEB-Seiten XML & JSON 1
MiMa parsen mit regex -> ein schnelles Ende XML & JSON 10
K Beim Parsen einer XML-Datei Connection timed out XML & JSON 4
F Parsen von Daten aus einer Homepage XML & JSON 6
G Langsam beim SAX-Parsen - woran liegts? XML & JSON 2
C Parsen des XML-Streams mit SAX XML & JSON 3
M XML Datei Parsen XML & JSON 4
D SAX parsen - Wie? XML & JSON 11
S XML Parsen und Werte zwischenspeichern XML & JSON 2
K Kurze XML Datei Parsen XML & JSON 5
whitenexx Problem beim parsen von Facebook XML XML & JSON 3
J Comments in XML parsen XML & JSON 3
H Nicht wohlgeformtes XML mit SAX parsen XML & JSON 2
Z XML parsen - Element mit Werten XML & JSON 2
ruutaiokwu xml nur bis auf eine bestimmte ebene parsen mit javax.xml... XML & JSON 5
L [SAX] Geschachtelte XML Datei parsen XML & JSON 3
R XML in UTF-8 mit SAX parsen XML & JSON 9
F Probleme beim html parsen mit tagsoup XML & JSON 4
M Probleme beim Parsen eines gefilterten XML-Dokuments XML & JSON 6
Semox Kann JUnit XML Parsen? XML & JSON 2
L Reihenfolge beim xml Datei parsen einhalten? XML & JSON 8
L xml Datei parsen ohne End-Tag XML & JSON 6
T RSS-Feed parsen und in Datenbank speichern XML & JSON 6
B XML parsen XML & JSON 3
H XML parsen und unbekannten Namespace zurückgeben XML & JSON 5
L invalide xml document parsen?! XML & JSON 2
S DOM Parsen Problem mit HTML Sonderzeichen XML & JSON 4
ABstraCT XML properties am einfachsten parsen. XML & JSON 2
U xmi parsen über emf XML & JSON 10
S XML-Schema einlesen um parsen zu erleichtern? XML & JSON 2
T Problem beim Parsen von Attribut xmlns="urn:com:test&qu XML & JSON 6
P XMLGregorianCalender parsen XML & JSON 4
M Datei parsen XML & JSON 5
S HTML mit dom4j parsen? XML & JSON 2
X XML File auslesen/parsen u. in ne Hashmap speichern XML & JSON 2
Saxony unbekannte XML Datei parsen und ausgeben XML & JSON 10
P "Formatierungs-Tags" parsen XML & JSON 3
M Attribute parsen XML & JSON 6
R Parsen einer XML ohne Validierung XML & JSON 2
D XML Datei innerhalb einer JAR Datei parsen XML & JSON 2
M Xerces -Parsen mit einer externen Schemadatei geht nicht XML & JSON 2
L bz2-Datei parsen XML & JSON 9
K XML parsen Whitespaces XML & JSON 2
I XML-String mit SAX parsen ? XML & JSON 2
M Object in XML parsen XML & JSON 2
byte Probleme beim Parsen von XHTML-Datei XML & JSON 4
P HTML Seite Parsen, und bestimmten Text extrahieren XML & JSON 3
X xml und xsl parsen mit xerces XML & JSON 8
W Xml-String parsen XML & JSON 2
W root element parsen,Hilfe! XML & JSON 5
F Gibt es Möglichkeiten Deutsche Sätze zu parsen ? XML & JSON 2
A Auf der Suche nach Bibliotheken oder wie parsen? XML & JSON 15
S XML Datei mit Schemafehler parsen XML & JSON 14
R StreamSource parsen ! XML & JSON 8
R RSS parsen XML & JSON 2
K XML Datei parsen XML & JSON 4
P JDOM oder SAX XML & JSON 3
Hijo2006 Grundsätzliches zu JDOM 2.x XML & JSON 1
W Kindelemente mit JDOM eines bestimmten Attributes auslesen XML & JSON 6
S JDOM XML Datei darstellen Fehler! XML & JSON 2
S JDom XML ein Element hinzufügen. XML & JSON 1
C JDOM: Value ohne Unterelemente auslesen XML & JSON 1
Z XML Datei mit JDOM einlesen und verarbeiten XML & JSON 6
J JDOM XMLOutputter getPrettyFormat() XML & JSON 3
H JDOM setAttribute Reihenfolge XML & JSON 3
B XML aus einer URL im Internet lesen (JDOM) XML & JSON 4
F Aus XML mit JDOM aus Elementattributen Werte rauslesen XML & JSON 4
R sax, stax, jdom, jaxb? List von Objekten speichern und laden XML & JSON 6
C xml validierung gegen xsd mit jdom: Fehlermeldung Cannot find the declaration of element ... XML & JSON 8
T Dom, Jdom, Sax XML & JSON 8
Helgon MalformedByteSequenceException und null JDOM Attribute XML & JSON 5
Helgon JDOM schreibt nicht XML & JSON 2
A XSl mit JDom auslesen XML & JSON 1
G xml, jdom "Entität wurde referenziert aber nicht deklariert." XML & JSON 4
A XSL und JDom XML & JSON 3
G jdom-Klassen in Eclipse importieren XML & JSON 2
S JDOM ohne XML Header erzeugen? XML & JSON 2
G JDOM - aus Children-Liste ein Child direkt ansprechen ohne XPath? XML & JSON 9
S JDOM nur Attribut Name XML & JSON 2
X JDom für SOAP Dateien geeignet? XML & JSON 3
T Xpath & JDOM Element Pfad ausgeben XML & JSON 2
S jdom hasChildren()? XML & JSON 1
T Frage zu getContent unter jdom XML & JSON 6
Z Tutorial für JDOM (XSD-Shema) XML & JSON 3
D jdom, xml, login-system XML & JSON 4
N JDOM: XML einlesen XML & JSON 4
lordcarlos jdom zu iso-8859-15 zwingen XML & JSON 4
P jdom XML-Encoding auslesen XML & JSON 12
E JDOM - letzem child Attribut hinzufügen XML & JSON 4
H Schema-Validierung mit JDOM XML & JSON 2
lordcarlos JDOM und entfernen von children XML & JSON 4
E JDOM - Problem beim Zusammenfügen zweier Dateien XML & JSON 2
T jdom.jar als Relativer Pfad in Eclipse einbinden XML & JSON 4
sparrow JDom Element.getChild("Name") liefert null obwohl vorhanden XML & JSON 4
S XML, UTF-8, JDOM und Umlaute XML & JSON 3
E XML - JDOM - Bäume: was würdet ihr hier machen? XML & JSON 11
A JDOM: Wert schreiben bzw. ändern XML & JSON 6

Ähnliche Java Themen

Neue Themen


Oben