一意の ID を基準にして要素を選択します。
node-set id(object)
解説
引数がノード セット型である場合、結果は、ノード セット引数内の各ノードの文字列値に id()
を適用した結果の和集合になります。
引数がその他の型である場合、引数は文字列に変換された後、空白で区切られたトークンのリストに分割されます (空白は、生成値と一致する任意の文字列のシーケンスです)。リスト内のいずれかのトークンと同じ一意の ID を持つコンテキスト ノードと同じドキュメント内の要素が含まれたノード セットが結果として生成されます。
例
XML ファイル (test.xml)
<?xml version="1.0"?>
<!DOCTYPE test [
<!ELEMENT test (x+)>
<!ELEMENT x (x+| y+)>
<!ATTLIST x
a ID #REQUIRED>
<!ELEMENT y ANY>
]>
<test>
<x a="a11">
<x a="a21">
<x a="a31">
<y>y31</y>
<y>y32</y>
</x>
</x>
</x>
<x a="a12">
<x a="a22">
<y>y21</y>
<y>y22</y>
</x>
</x>
<x a="a13">
<y>y11</y>
<y>y12</y>
</x>
<x a="a14">
<y>y03</y>
<y>y04</y>
</x>
</test>
XSLT ファイル (test.xsl)
<?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"/>
<!-- 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="id('a21') "/>
and
<xsl:apply-templates select="id('a11')//y[1]"/>
</xsl:template>
</xsl:stylesheet>
出力
XSLT スタイル シートを上の XML ファイルに適用すると、次のノードセットが生成されます。
<x a="a21">
<x a="a31">
<y>y31</y>
<y>y32</y>
</x>
</x>
and
<y>y31</y>