# XQuery - Frage zur Ausgabe



## skizZ (13. Jul 2011)

Hallo,

gegeben ist folgendes XML Dokument:

[XML]<?xml version="1.0" encoding="UTF-8"?> 
<a> 
 <a>0</a> 
 <b>0</b> 
 <c>1</c> 
 <a> 
  <c>2</c> 
  <c>3</c> 
 </a> 
 <b> 
  <c>4</c> 
 </b> 
</a>[/XML]

und folgende XQuery-Anfrage:

[XML]for $i in //c[../b] 
return <e>{$i}</e>[/XML]

Es folgt die Ausgabe:
<e><c>1</c></e>

Aber warum kommt hier als Ergebnis die 1 und nicht die 4?

skizZ


----------



## eRaaaa (13. Jul 2011)

Weil in <b> nicht nochmal das Tag <b> enthalten ist sondern nur <c> ! (Zeilen 10-12)
Wäre dort noch einmal das Tag <b> enthalten, also z.B. so:
[xml]
<?xml version="1.0" encoding="UTF-8"?> 
<a> 
 <a>0</a> 
 <b>0</b> 
 <c>1</c> 
 <a> 
  <c>2</c> 
  <c>3</c> 
 </a> 
 <b> 
  <c>4</c> 
  <b>DIESES HIER</b> 
 </b> 
</a>
[/xml]
dann solltest du *auch* die 4 erhalten! Denke du hast hier ein Denkfehler, was genau willst du denn erreichen? Bzw. was hast du dir bei der expression gedacht (vlt übersetzt in Worte ). Der Nachbarknoten von <c> in Zeile 5 ist *NICHT* das <b> in Zeile 4, sondern das <a> in Zeile 2! Ist das dein Denkfehler?


----------



## tagedieb (13. Jul 2011)

```
//c[../b]
```
 bedeutet: Suche alle <c>, welche auf der gleichen Stufe auch ein <b> haben 

Ich glaube was du suchst ist:

```
//c[/b]
```
 : Suche alle <c>, welche ein <b> Subelement besitzen


----------



## eRaaaa (13. Jul 2011)

tagedieb hat gesagt.:


> ```
> //c[/b]
> ```
> : Suche alle <c>, welche ein <b> Subelement besitzen



Mhm? Dann wäre das bei seinem Beispiel doch eine leere Ergebnismenge oder nicht? :bahnhof:

/edit: ich gehe eher davon aus er sucht so etwas wie [c]//c[name(..)='b'][/c]


----------



## tagedieb (14. Jul 2011)

Stimmt, Ich habs falsch gelesen.

Mit 
	
	
	
	





```
//b/c
```
 muesste dann auch die 4 rauskommen. Oder Anhand der urspruenglichen Formulierung koennte man es wohl auch so darstellen 
	
	
	
	





```
//c[../../b]
```


edit: nein 
	
	
	
	





```
//c[../../b]
```
 funktioniert nicht, da kommen dann alle 
	
	
	
	





```
c
```
 raus


----------



## skizZ (14. Jul 2011)

Hallo,

danke für die Antworten.

Ich dachte, dass dieser Ausdruck bedeutet:
Suche alle C, die sich innerhalb eines B befinden.

So macht das natürlich Sinn 

Vielen Dank.


----------

