# Prbolem XPath



## thomas1980 (13. Dez 2007)

Hallo, ich habe ein Problem mit der XPath-Abfrage einer XML-Datei.
Für die Abfrage habe ich folgenden JavaCode geschrieben, von dem ich hier nur den wichtigsten Teil darstelle:


```
builder = factory.newDocumentBuilder();
	document = builder.parse( new File("NewFile.xml") );
			
	XPathFactory xfactory = XPathFactory.newInstance();
	XPath xpath = xfactory.newXPath();
	XPathExpression expr = xpath.compile("/Kunden/Kunde/Vorname[1]/text()");
	Object result = expr.evaluate(document, XPathConstants.STRING);
	String s1 = result.toString();
	System.out.println("Test:" + s1);
```


Dazu soll folgende XML-Datei ausgelesen werden, die ich auch etwas verkürzt angebe:


```
<?xml version="1.0" encoding="UTF-8"?>
<Kunden>
<Kunde ID="1">
<Vorname>xy</Vorname>
<Nachname> xy</Nachname>
</Kunde>

<Kunde ID="2">
<Vorname>egal</Vorname>
<Nachname>egal</Nachname>
</Kunde>
```

Das Ergebnis lautet dann:
Test:xy
Wenn ich nun die obige Afrage ändere auf:


```
XPathExpression expr = xpath.compile("/Kunden/Kunde/Vorname[2]/text()");
```

gibt mit das Programm keine Ausgabe zurück. Warum??? Normalerweise müsste mir mit dem Ausdruck ...position() = 2... eigentlich doch der Vorname "egal" ausgegeben werden, oder?


Grüße
thomas
[/code]


----------



## muck1980 (13. Dez 2007)

Hallo Namensvetter 

Du hast an der falschen Stelle die [2] eingetragen. Du willst ja den Vornamen des zweiten Kunden haben und nicht den zweiten Vornamen von was auch immer.

Es muss also so aussehen:


```
XPathExpression expr = xpath.compile("/Kunden/Kunde[i]/Vorname/text()");
```


wobei das _ dann mit dem entsprechenden int ersetzt werden muss.

Hoffe ich konnte helfen.

Grüße
Thomas_


----------



## mikachu (18. Dez 2007)

du willst den 2. vornamen des ersten kunden ausgeben...
ich sehe da aber nur einen vornamen 

wenn du den vornamen des 2. kunden erreichen willst, dann musst du statt

```
XPathExpression expr = xpath.compile("/Kunden/Kunde/Vorname[2]/text()");
```
folgendes schreiben

```
XPathExpression expr = xpath.compile("/Kunden/Kunde[2]/Vorname/text()");
```

lies: gib mir von dem kunden mit der position 2 den vornamen-text

vielleicht ein kleiner fehler in der logik...

#edit 1: ist im prinzip das gleiche, wie muck1980 geschrieben hat, was ich aber überlas


----------

