Das folgende Geschwister in einem XPath erhalten, wenn die "Achse" nicht unterstützt wird

Ich versuche, die Textelemente einer Tabelle zu erhalten, die einem Absatz folgt, der ein bestimmtes Textelement mit XQuery auf MS SQL server enthält. Das Problem ist, wann immer ich die Achsen "folgend", "Nach-Geschwister" oder "vorheriges Geschwister" verwende, bekomme ich einen Fehler, der sagt, dass dies in SQL server nicht unterstützt wird (ich benutze Version 2008). So kann ich zum Beispiel den ersten Absatzknoten erhalten, der einen Textknoten enthält, dessen Wert "blah" ist:

//w:p[descendant::w:t = "blah"] 

Und ich kann den Text aus einem Tabellenelement mit:

 //w:tbl//w:t/text() 

Ich sehe keine Möglichkeit, dass ich die Abfrage zwingen kann, nur das erste Tabellenelement zurückzugeben, das dem zuvor erfassten Absatzknoten folgt, da:

 //w:tbl[following:://w:p//w:t = "blah"]//w:t/text() 

Gibt den Fehler: "XQuery [Specification.document.query ()]: Die XQuery-Syntax 'folgt' wird nicht unterstützt.

Und das gleiche für:

 //w:tbl[following-sibling::w:p[descendant::w:t = "blah"]]//w:t/text() 

Gibt "XQuery [Specification.document.query ()]: Die XQuery-Syntax 'follow-sibling' wird nicht unterstützt."

Das ist nicht richtig, das weißt du! XPath hat folgendes und folgendes Geschwister unterstützt seit 1.0 zurück im Jahr 1999 AFAICT so MS SQL server scheint schwerwiegend in Bezug auf die Standard-Compliance zu sein, aber irgendwie, sieht jemand, wie ich dies ohne diese Achsen tun kann? Danke im Voraus!

Die Dokumentreihenfolge der Knoten in XQuery kann auch mit Hilfe von Knotenvergleichsoperatoren ausgewertet werden.

Operator >> gilt für zwei Knoten und gibt true zurück, wenn der linksseitige Knoten dem rechten Knoten in der Dokumentenreihenfolge folgt. Zur Lösung deines Problems wählst du den ersten Knoten aus.

Im folgenden Code sind $blah und $text die angegebenen Ausdrücke. Der zurückgegebene Wert ist der erste Knoten in $text , der dem ersten Knoten in $blah folgt.

 let $blah := //w:p[descendant::w:t = "blah"] let $text := //w:tbl//w:t/text() return $text[. >> $blah[1]][1] 

Oder, kombiniert zu einem einzigen Ausdruck,

 (//w:tbl//w:t/text()[. >> (//w:p[descendant::w:t = "blah"])[1]])[1]