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 属性のリストが表示されるはずです。(パイプはユニオン演算子です)