# XML Jaxen Attribute auslesen



## eQuest (18. Okt 2010)

Hi Community,
ich schreibe gerade an einem Programm, welches Daten aus einer XML einliest und dann weiter verarbeitet. Die Struktur der XML sieht wie folgt aus:

```
<Schule>
  <Abteilung>
    <Klasse Bezeichnung="">
      <Schueler>
        <Adresse />
      </Schueler>
    </Klasse>
  </Abteilung>
</Schule>
```

Nun will ich erstmal die Bezeichnung aller Klassen auslesen.

```
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		Node doc = builder.parse(new InputSource(new FileInputStream("liste.xml")));
		XPath xpath=new DOMXPath("/Schule/Abteilung/Klasse/@Bezeichnung");
		gui.setList1(new JList(xpath.selectNodes(doc).toArray()));
```

Leider steht im Ergebnis immer wieder auch die Attributbezeichnung drinnen, obwohl mich eigentlich nur der Wert interessiert (also immer wieder Bezeichnung="...", Bezeichnung="...", etc). Wie schaffe ich es, dass nur der Wert ausgelesen wird?

mfg


----------



## eRaaaa (18. Okt 2010)

selectNodes liefert dir eben eine Liste mit den Nodes..da steckt eben beides drinnen. Du kannst aber eben die Elemente auf DeferredAttrImpl/Node casten und dann die Methode getValue benutzen um so an den Wert zukommen.
Du könntest also so etwas wie das Folgende machen, anstelle von deinem [c]gui.setList1(new JList(xpath.selectNodes(doc).toArray()));[/c]

```
List<DeferredAttrImpl> nodes = xpath.selectNodes(doc); //hier vllt @SuppressWarnings("unchecked") annotation dran :)
		String[] arr = new String[nodes.size()];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = nodes.get(i).getValue();
		}
		gui.setList1(new JList(arr));
```

oder du lässt eben das "Umkopieren" (bzw eben das Erstellen des Arrays) in ein String-Array komplett weg und benutzt einfach direkt die Liste und implementierst dein eigenes ListModel...aber das wäre jetzt wieder ein anderes Thema.

Also Zusammenfanssend: selectNodes liefert eine Liste von DeferredAttrImpl-Objekten. Diese haben unteranderem die Methode getValue / getNodeValue , getName usw., welche du benutzen kannst. (evtl. casten notwendig!)

Hoffe das hilft dir weiter


----------



## eQuest (18. Okt 2010)

jawohl, schnelle Antwort und funktioniert, ein Traum 
dankeschön


----------

