XQuery - Frage zur Ausgabe

skizZ

Aktives Mitglied
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
 
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?
 
Code:
//c[../b]
bedeutet: Suche alle <c>, welche auf der gleichen Stufe auch ein <b> haben

Ich glaube was du suchst ist:
Code:
//c[/b]
: Suche alle <c>, welche ein <b> Subelement besitzen
 
Stimmt, Ich habs falsch gelesen.

Mit
Code:
//b/c
muesste dann auch die 4 rauskommen. Oder Anhand der urspruenglichen Formulierung koennte man es wohl auch so darstellen
Code:
//c[../../b]


edit: nein
Code:
//c[../../b]
funktioniert nicht, da kommen dann alle
Code:
c
raus
 
Zuletzt bearbeitet:
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.
 

Zurück
Oben