XML属性ノード

XQueryを書いていて、「属性の値を取り出して文字列を作る」為に/path/@属性名/text()と書いたら内容が出てこなくてちょっと詰まった。
よくよく考えると、「/text()」とは「以下のテキストノード」という意味であって、中にテキストノードを含まない属性ノードでは何も出てこないのは当たり前だった。*1

属性ノードの下にノードはないんだからこの記述はそもそも文法エラーじゃないのか?とか思うが、属性ノードからparent軸に沿って上に戻るという小難しい状況のこととかを考えに入れると文法エラーにする基準が難しいのだろう。


string()関数にかけてやるとテキストが取り出せたのでこれで解決。

*1:普段はエレメントに対して適用しているので、何となく「中身」という意味に思えてしまっていた。慣れとは恐ろしい。