フィルタ パターンには論理式、比較式、セット式を含めることができます。次の表に一覧した短縮形は、この XSLT (XSL Transformations) の実装で提供されている代替のシンボルを表しています。このドキュメントではこれらの演算子について説明します。
Operator | 説明 |
---|---|
|
論理積 |
|
論理和 |
|
否定 |
|
等しい |
|
等しくない |
|
より小 |
|
より小または等しい |
|
より大 |
|
より大または等しい |
|
集合演算、2 つのノード セットの和集合を返す |
* 拡張 XPath 演算子
W3C (World Wide Web Consortium) 構文の演算子キーワードでは、バージョン 2.5 で使用されたドル記号 ($
) ではなく、空白と他の区切り記号を使用します。W3C 構文で、$xxx$ の形式の二項キーワードは wsxxxws と表現できます。ここで、ws はトークン終了文字で、空白か一重引用符 ('
)、または二重引用符文字 ("
) です。not()
などの単項演算子は関数表記を使用します。Microsoft の実装では両方の構文をサポートしますが、将来の互換性から W3C 構文の使用が推奨されます。
論理演算子と比較演算子の優先順位 (最優先度から順に) を次の表に示します。
優先順位 | 演算子 | 説明 |
---|---|---|
1 |
|
グループ化 |
2 |
|
フィルタ |
3 |
|
Path 演算 |
4 |
|
比較 |
5 |
|
比較 |
6 |
|
union |
7 |
|
ブール型演算子 not |
8 |
|
ブール型演算子 and |
9 |
|
ブール型演算子 or |
演算子を XSLT スタイル シートなどの XML ドキュメントで使用する際には、<
および >
トークンは、それぞれ <
および >
に置き換える必要があります。たとえば、次の XSLT 命令は、<price>
要素の数値が 10 より小か等しい <book>
要素に対して XSLT テンプレート規則を適用します。
<xsl:apply-templates select="book[price <= 10]"/>
XPath 式を DOM で使用する場合は < および > 演算子を置き換える必要はありません。たとえば、次の JScript ステートメントは、<price>
要素の数値が 10 より小か等しいすべての <book>
要素を選択します。
var cheap_books = dom.selectNodes("book[price <= 10]");
論理式は、特定の値のすべてのノードまたは特定の範囲のすべてのノードに一致します。次は、False を返す論理式の一例です。
1 >= 2
演算子では大文字と小文字が区別されます。
論理積と論理和
論理演算子 and
および or
は、それぞれ論理積演算と論理和演算を実行します。これらの演算子はグループ化を行うかっこと組み合わせて、複雑な論理式を組み立てるために使用することができます。
例
式 | 説明 |
---|---|
|
少なくとも 1 つの |
|
少なくとも 1 つの |
ブール型演算子 not
論理演算子 not
はフィルタ パターン内の式の値を否定します。
例
式 | 説明 |
---|---|
|
少なくとも 1 つの |
author[not(degree or award) and publication] |
少なくとも 1 つの |
例
XML ファイル (test.xml)
<?xml version="1.0"?>
<test>
<x a="1">
<x a="2" b="B">
<x>
<y>y31</y>
<y>y32</y>
</x>
</x>
</x>
<x a="2">
<y>y2</y>
</x>
<x a="3">
<y>y3</y>
</x>
</test>
XSLT ファイル (test.xsl)
次の XSLT スタイルシートは属性を持たないすべての <x> 要素を選択します。
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<!-- suppress text nodes not covered in subsequent template rule -->
<xsl:template match="text()"/>
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="*|@*"/>
<xsl:if test="text()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="/test">
<xsl:apply-templates select="//x[not(@*)] "/>
</xsl:template>
</xsl:stylesheet>
出力
上記の XML ファイルに変換を適用すると以下の結果が得られます。
<x>
<y>y31</y>
<y>y32</y>
</x>