フィルターおよびフィルター パターン (XPath)
コレクションにフィルター句 [パターン] を追加することにより、制約と分岐をコレクションに適用することができます。 フィルターは SQL の WHERE 句に類似しています。 フィルターにはフィルター パターンが含まれています。 フィルター パターンはコレクションの各要素に対してテストされ、論理値として評価されます。 フィルター パターンのテストに不合格となったコレクション内の要素は、結果のコレクションから除外されます。
フィルター内にコレクションが含まれる場合、便宜上、コレクションに何かメンバーが含まれていると論理値 TRUE が生成され、コレクションが空の場合は FALSE が生成されます。 author/degree などの式はコレクションから論理値への変換関数を意味し、<degree> という名の子要素を持つ <author> 要素が存在する場合は TRUE として評価されます。
式の所定のレベルで任意数のフィルターを使用することができます。 空のフィルターは使用できません。
フィルターは常にコンテキストに対して評価されます。 言い換えると、式 book[author] は、見つかったすべての <book> 要素に対して、それに <author> 子要素が存在するかどうかがテストされます。 同様に、book[author = 'Bob'] は、見つかったすべての <book> 要素に対して、それに値 Bob を持つ <author> 子要素があるかどうかがテストされます。 コンテキストの値もピリオド (.) 文字を使用して調べることができます。 たとえば book[. = 'Trenton'] は、現在のコンテキスト内で見つかったすべての book に対して、その値が Trenton かどうかがテストされます。
例
式 |
説明 |
---|---|
book[excerpt] |
少なくとも 1 つの <excerpt> 要素を含むすべての <book> 要素。 |
book[excerpt]/title |
少なくとも 1 つの <excerpt> 要素を含む <book> 要素内のすべての <title> 要素。 |
book[excerpt]/author[degree] |
少なくとも 1 つの <excerpt> 要素を含む <book> 要素内にあり、少なくとも 1 つの <degree> 要素を含むすべての <author> 要素。 |
book[author/degree] |
少なくとも 1 つの <degree> 子要素を持つ少なくとも 1 つの <author> 要素を含む、すべての <book> 要素。 |
book[excerpt][title] |
少なくとも 1 つの <excerpt> 要素を含み、少なくとも 1 つの <title> 要素を含む、すべての <book> 要素。 |