<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”的文本节点。
稍后在模板中,使用具有属性的上下文元素
@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
显然,我遗漏了一些关于属性节点如何原子化以便在谓词中使用的基本知识,但在docs(michaelkay的XSLT/XPATH 2.0,第4版)中找不到任何可以解释这种差异的内容。
有人能解释一下为什么会发生这种情况,并指出在XSLT2.0规范或MichaelKay的书中,在哪里描述了这种情况吗?
(XSLT处理器是Saxon PE 9.2.0.3)