集合演算
XML Path 言語 (XPath) は集合演算 |
をサポートします。
UNION (|) 演算子
|
つまり Union 演算子は 2 つのオペランドの和集合を返します。オペランドはノードセットでなければなりません。 たとえば //author | //publisher
は、すべての //author
ノードとすべての //publisher
ノードを結合した 1 つのノード セットを返します。 複数の UNION 演算子を続けて、複数のノード セットを結合することができます。 たとえば、//author | //publisher | //editor | //book-seller
は、すべての //author
、//publisher
、//editor
、および //book-seller elements
を含むノード セットを返します。 UNION 演算子はドキュメントの順序を維持し、重複してノードを返すことはありません。
例
式 | 説明 |
---|---|
|
現在のコンテキストの |
|
|
|
すべての |
|
|
例
次の例で UNION 演算子の効果について説明します。
XML ファイル (test.xml)
XSLT ファイル (test.xsl)
次の XSLT スタイル シートは、a
属性が 2
に等しいすべての <x>
要素と、属性を持たない <x>
要素を選択します。
変換により次の結果が得られます。
優先順位
ブール型演算子と比較演算子の間の優先順位 (最優先度から順に) を次の表に示します。
優先順位 | 演算子 | 説明 |
---|---|---|
1 |
|
グループ化 |
2 |
|
フィルター |
3 |
|
Path 演算 |
4 |
|
比較 |
5 |
|
比較 |
6 |
|
和集合 |
7 |
|
ブール型演算子 not |
8 |
|
ブール型演算子 and |
9 |
|
ブール型演算子 or |
例
次の例で、上記演算子の優先順位が及ぼす効果について説明します。
XML ファイル (test.xml)
基本 XSLT ファイル (test.xsl)
以降に続く一連の説明の出発点として、この基本 XSLT ファイルを使用します。
ケース 0: テスト実行
次のテンプレート規則を XSLT スタイル シートに追加することができます。
これにより、<?xml version="1.0"?>
処理命令のない、オリジナルと同一の XML ドキュメントが生成されます。
次の各ケースで、このテンプレート規則を書く各種の方法を示します。 要点は、XPath 演算子が要素に結び付けられる順序を示すことです。
ケース 1 : () は [] よりも強固に結び付く
次のテンプレートは、ソース ドキュメントのすべての <y>
要素の中から、ドキュメント内の順で最初の <y>
要素を選択します。
この結果は次のようになります。
<y>y31</y>
ケース 2 : [] は / や // よりも強固に結び付く
次のテンプレート規則は、兄弟の中で最初の <y>
要素をすべて選択します。
この結果は次のようになります。
<y>y31</y>
<y>y21</y>
<y>y11</y>
<y>y03</y>
ケース 3 : and、not
次のテンプレート規則は、子要素 <x>
を持たず、親要素 <x>
を持ち、属性をまったく持たない <x>
要素をすべて選択します。
結果は、子と共に下に一覧される 1 つの <x>
要素です。
<x>
<y>y31</y>
<y>y32</y>
</x>
ケース 4 : or、and、not
次のテンプレート規則は、<x>
要素の子であるか、または <x>
要素の親でなく属性をまったく持たない、各 <x>
要素を選択します。
結果は、子と共に下に一覧された、次の <x>
要素を含むノード セットです。
ケース 5 : and、or、not
次のテンプレート規則は、<x>
要素の子であるが <x>
要素の親ではない <x>
要素、または属性を持たない <x>
要素を選択します。
結果は、子と共に下に一覧された、次の <x>
要素を含むノード セットです。