与えられた
<xsl:variable name="datePrecision" as="element()*">
<p>Year</p>
<p>Month</p>
<p>Day</p>
<p>Time</p>
<p>Timestamp</p>
</xsl:variable>
表現
$datePrecision[5]
予想どおり、値「Timestamp」を持つ 1 つのテキスト ノードを含む nodeSet を返します。
テンプレートの後半で、コンテキスト要素が属性を持つ
@precision="5"
次の式を試してみましたが、すべて空の文字列が返されます。
$datePrecision[@precision]
$datePrecision[number(@precision)]
$datePrecision[xs:decimal(@precision)]
ただし、次のシーケンスは私が望むことを行います
<xsl:variable name="prec" select="number(@precision)"/>
... $datePrecision[$prec] ...
Oxygen/XML のデバッガーを使用して、式が評価されようとしているところまで進み、ウォッチ ウィンドウに次のように表示します。
Expression Value Nodes/Values Set
-------------------------- --------------- -----------------------
$datePrecision[5] Node Set(1) #text Timestamp
@precision Node Set(1) precision 5
$datePrecision[@precision]
number(@precision) 5
$datePrecision[number(@precision)]
$prec 5
$datePrecision[$prec] Node Set(1) #text Timestamp
明らかに、述語で使用するために属性ノードを原子化する方法について基本的なことを見逃していましたが、この違いを説明するドキュメント (Michael Kay の XSLT/XPATH 2.0、第 4 版) には何も見つかりません。
誰かがなぜこれが起こっているのかを説明し、XSLT 2.0仕様またはMichael Kayの本で、これが説明されている場所を教えてもらえますか?
(XSLT プロセッサは Saxon-PE 9.2.0.3 です)