Aus XML lesen

Hallo zusammen,

ich hab eine XML-Datei in folgendem Format:

[XML]<?xml version="1.0" encoding="UTF-8"?>


1
abc@xyz.de


1
def@xyz.de


0
ghi@xyz.de

[/XML]

Nun möchte ich alle E-Mail-Adressen in eine ArrayList einlesen, die bei InUse mit 1 markiert sind.

Mein Problem ist, wenn ich über folgenden Code versuche, die XML einzulesen, enthält die Node-List keine Elemente:

File xmlFile = new File("emails.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
			
doc.getDocumentElement().normalize();
			
NodeList nList = doc.getElementsByTagName("EMail");
			
for(int i = 0; i < nList.getLength(); i++)
{
	//Code zum Verarbeiten, hier unwichtig
}

Hallo Orothred,

setzt mal nach dem Parsen folgende Zeile ein:
System.out.println(doc.getFirstChild().getNodeName());

So kannst du schon mal feststellen, ob das Parsen richtig funktioniert hat.

MfG
hansmueller

Scheint zu funktionieren, er gibt mir dann den Namen des rootElement aus.

Wenn ich die von dir gepostete XML nehme und deinen Code, funktioniert das bei mir wunderbar. Habe jetzt mal die Forschleife erweitert zu:

for(int i = 0; i < nList.getLength(); i++)
{
    Element item = (Element) nList.item(i);
    System.out.println("Is " + item.getElementsByTagName("Address").item(0).getTextContent() + " in use: " + item.getElementsByTagName("InUse").item(0).getTextContent());
}

und bekomme folgendes Ergebnis:


Is abc@xyz.de in use: 1
Is def@xyz.de in use: 1
Is ghi@xyz.de in use: 0

Bei deinem initialpost hattest du in deiner XML zusätzliche -'s stehen gehabt. Könnte es sein dass du hier eine angepasste XML gepostet hast und deine Original kein gültiges XML ist? Bekommst du irgendwelche Fehlermeldungen?

Seltsam, bei mir funktionierts wie gesagt nicht…

Die - kamen nur, weil ich die Daten aus der Ansicht vom IE rauskopiert hatte, hab ich dann im nachhinein bearbeitet.

XML ist also gültig, Fehlermeldungen bekomme ich keine…

Und was passiert, wenn du dich testweise von Node zu Node hangelst?

MfG
hansmueller

Grad nochmal durchdebuggt, das Einlesen ansich scheint doch zu funktionieren, in die Schleife geht er auch. Ich poste doch mal den Code innerhalb der Schleife:

for(int i = 0; i < nList.getLength(); i++)
{
	Node nNode = nList.item(i);
	
	if(nNode.getNodeType() == Node.ELEMENT_NODE)
	{
		Element element = (Element) nNode;
		if(element.getElementsByTagName("InUse").item(0).getTextContent() == "1")
		{
			Mail mail = new Mail(element.getElementsByTagName("Address").item(0).getTextContent(), "", "", "");
			emailList.add(mail);
		}
	}
}```

In die if geht er nicht rein, auch wenn InUse auf 1 steht. Wahrscheinlich seh ich mal wieder den Code vor lauter Zeichen nicht :D

Strings nicht mit == vergleichen

Kopf → Tisch…natürlich…danke

Ich sags ja, Code vor lauter Zeichen…

Passt schon. :wink:

Ist das Problem damit jetzt behoben?

Japp, ist es :slight_smile: