XPath 式は、要素または要素属性のいずれかのみを指す/選択できると考えるのは正しいですか?
3 に答える
式が評価されて、次の 4 つの基本型のいずれかを持つオブジェクトが生成されます。
- node-set (重複のない順序付けられていないノードのコレクション)
- ブール値 (真または偽)
- 数値 (浮動小数点数)
- 文字列 (一連の UCS 文字)
ノードはドキュメント ツリーの要素であるため、要素ノード、属性ノード、およびテキスト ノードを含めることができます。また、XPath 式は、単一のノードだけでなく、多数のノード (つまり、多数の要素) を選択できることに注意してください。
いくつかの例:
//monkey
-<monkey>
ドキュメント内のすべての要素、ノードセットを選択しますcount(//monkey)
<monkey>
- すべての要素の数、数値を返しますcontains("mouse", "cat")
- false、ブール値を返します(//monkey)[0]/text()
<monkey>
- 最初の要素である文字列からテキストを返します
Dave Webb によって現在受け入れられている回答は、部分的にしか正しくありません。
7 種類のノードすべてを選択できます。
- ルート(ドキュメント ノード)、のように
"/"
- Elements、次のように:
"/*"
- 次のような属性:
"//@*"
- 次のようなテキスト ノード
"//text()"
- 以下のようにノードをコメントします。
"//comment()"
- 次のような命令ノードの処理:
"//processing-instruction()"
- 次のような名前空間ノード
"//namespace::*"
また、特定の XPath エンジンのホストによっては、選択したノード セットに複数のドキュメントのノードが含まれる場合があることも知っておくとよいでしょう。たとえば、ホストが XSLT の場合、次の XPath 式:
"document($uri1)//* | document($uri2)//*"
$uri1
で識別されるドキュメント内のすべての要素と、 で識別されるドキュメント内のすべての要素の和集合を選択し$uri2
ます。
選択したノードセット内のノードの順序は「ドキュメント順」(深さ優先) ですが、これは同じドキュメントに属するノードにのみ適用されます。複数のドキュメントに属するノードが選択された場合、異なるドキュメントに属するノード間の順序は定義されません (実装依存)。
最後に、XPath 2.0 では、選択は任意のタイプのアイテムのシーケンス (場合によっては混合) (および定義済みの順序を持つ) である可能性があり、(ユーザー定義のタイプが使用されている場合) 以下を含むアイテム タイプのセットが無制限になる可能性があります。すべての組み込み XML スキーマ タイプ。
XPath 2.1 (W3C ワーキング ドラフトは、私たちが話しているときに公開される予定です) では、関数が言語のファースト クラスの型になり、パラメーターとして渡すことができるため、"関数項目" 型も存在します。関数、シーケンスに保存されるか、動的に作成されます。
集合演算子は自由に使用できるので、ほとんど何でも選択できます。
//x | //@x
構文を正しく思い出せば、すべての x 要素とすべての x 属性のリストが表示されるはずです。(パイプはユニオン演算子です)