Wie heißt das XML-Element?

Andre_Java

Mitglied
Ich arbeite mit JDOM und lese eine XML Datei aus. Die Values kann ich bereits mit einer Schleife auslesen:

meineVariable.getAttribute( "value" ).getValue();

Nur wie komme ich an die "XYZ" und "AAA" Information?


PHP:
<Root>

  <XYZ value="TRUE" />
  <AAA value="TRUE" />

</Root>
 
Zuletzt bearbeitet:
Hi, ich denke es müsste so gehen: (nicht getestet)

Java:
	Element root = oDoc.getRootElement();
	root.getChildren("pc_CS").getAttributValue("value");
	root.getChildren("pc_PS").getAttributValue("value");

Sollte es nicht gehen, schreib einfach nochmal dann schau ich nochmal drüber!

Gruss Ben
 
Das Problem ist, dass ich "XYZ" und "AAA" vorher nicht kenne. Diese Werte sind jedes mal anders. Wenn ich das richtig erkannt habe sind das die "Children" des root-Elementes?
 
Zuletzt bearbeitet:
Wenn ich das richtig erkannt habe sind das die "Children" des root-Elementes?
Richtig!

Wenn dir die Knotennamen nicht bekannt sind musst du aber wenigstens wissen unter welchem Knoten die beiden zu finden sind, oder?
Je nachdem unter welchem Knoten sie zu finden sind kannst du ja für alle Kinder des Knotens die Namen der Kindknoten + values ausgeben lassen und damit ein array aufbauen.

Wenn du das ganze Szenario näher spezifizieren kannst, kann ich versuchen dir bei deinem Problem zu helfen.
 
Also ich habe jedesmal eine andere XML-Datei. Das Rootelement ist immer gleich (Root). Die Kind-Elemente (z.B. XYZ) sind immer unterschiedlich. Ich möchte dann der Reihe nach die Elemente auslesen, zusammen mit dem Attribute "value".

PHP:
<Root> 

  <XYZ value="5" /> 
  <AAA value="TRUE" /> 

</Root>

Ausgelesen werden soll also:

XYZ hat den Wert 5
AAA hat den Wert TRUE

Mein bisherigen Code gibt mir bereits die Values aus:
PHP:
Iterator meinIterator = docEinroot.getChildren().iterator(); 
     while (meinIterator.hasNext())
     {
       Element KindElement = (Element) meinIterator.next();
       String Wert = KindElement.getAttribute( "value" ).getValue();
       System.out.println(Wert);
     }

Die Ausgabe sieht also im Moment so aus:

5
TRUE

Jetzt müsste ich nur wissen, wie ich zusätzlich noch die Elemente auslese. Mit .getElement() oder .getChild() gehts leider nicht. Da habe ich wohl noch ein Verständnisproblem.
 
Zuletzt bearbeitet:
Hier ist meine Lösung:

Java:
			Element root = oDoc.getRootElement();
			String rootname= root.getName();
			System.out.println("Root: "+ rootname);
			List list= root.getChildren();
			
			Iterator it1= list.iterator();

			while(it1.hasNext()){
				Element children = (Element)it1.next();
				String cname = children.getName();
				String cvalue = children.getAttributeValue("value");
				System.out.println("Kind: " + cname + " hat den Wert: " + cvalue);
				// hier könnte man einer Liste den Namen und den Wert der Kinder uebergeben
			}

(Getestet und funktioniert)
Das müsste das sein was du wolltest, oder?

PS: bei deinem Ansatz: PIXIT.getName();
Solltest du wieder einmal einen Befehl nicht kennen benutz doch die API:
http://www.jdom.org/docs/apidocs/

Gruss Ben
 
Zuletzt bearbeitet von einem Moderator:
OK, das wars. Danke. :)

Eigentlich ganz simpel. Da hätte ich drauf kommen müssen. :(

Edit:

Jetzt sehe ich gerade, dass zwischendurch in der XML-Datei vereinzelt Elemente ohne Attribute sind. Wenn Jdom da nach dem Value sucht, gibt es eine Exception. Wie fängt man sowas ab? Es gibt den Befehl .hasChildren(), aber ich bräuchte sowas wie .hasValue() ?
 
Zuletzt bearbeitet:
Das ganze ist jetzt zwar schon ne Weile her, aber der vollständigkeit halber schreib ich jetzt mal noch was dazu.

OK, das wars. Danke. :)
Jetzt sehe ich gerade, dass zwischendurch in der XML-Datei vereinzelt Elemente ohne Attribute sind. Wenn Jdom da nach dem Value sucht, gibt es eine Exception. Wie fängt man sowas ab? Es gibt den Befehl .hasChildren(), aber ich bräuchte sowas wie .hasValue() ?

Das Problem kannst du auf mehrere Arten lösen, entweder du packst das ganze in einen tr{}catch(){}-Block oder du kannst auch manuell für jedes Element e dir die Liste seiner Attribute ausgeben lassen: e.getAttributes()
Wenn die Liste leer ist darfst du dementsprechend dann keine Abfrage auf Attribute ausführen.

@ Andre_Java: Solltest du das lesen schließ das Thema doch bitte noch.

Gruss Ben
 
Mit try und catch arbeite ich bereits. Ganz ohne geht es ja nicht.

Ich habe jetzt für mein Programm vorausgesetzt, dass keine Values fehlen dürfen. Alles andere macht ja auch keinen Sinn. Einträge ohne Wert kann man sich auch gleich sparen.
 
Zurück