文本值模板和 xsl:variable
Text Value Templates and xsl:variable
在变量中创建错误消息时,我注意到了一个怪癖。我原以为下面的所有 3 个示例都能正常工作 - 我使用的是 Saxon 9.8EE。
这很好用:
<xsl:variable name="error" select="'Error reading: ' || $file"/>
这也是:
<xsl:variable name="error"><text>Error reading: {$file}</text></xsl:variable>
但这会将 {$file} 呈现为文字字符串,而不是 $file 的值:
<xsl:variable name="error">Error reading: {$file}</xsl:variable>
用例在 otherwise 块中以捕获失败的文件读取:
<xsl:otherwise>
<xsl:variable name="error" select="'Error reading: ' || $file"/>
<xsl:message>{$error}</xsl:message>
{$error}
</xsl:otherwise>
嵌入的文本元素是强制性的吗?为什么消息元素不需要这个?
这是一个错误。请观看错误跟踪器
https://saxonica.plan.io/issues/3748
坚持到底直到解决。
解决方法是添加属性 as="xs:string"
。事实上,无论如何添加它可能是一个好主意,因为该变量几乎肯定是用作字符串(而不是用作包含单个文本节点子节点的文档节点,这是没有 "as" 属性).
在变量中创建错误消息时,我注意到了一个怪癖。我原以为下面的所有 3 个示例都能正常工作 - 我使用的是 Saxon 9.8EE。
这很好用:
<xsl:variable name="error" select="'Error reading: ' || $file"/>
这也是:
<xsl:variable name="error"><text>Error reading: {$file}</text></xsl:variable>
但这会将 {$file} 呈现为文字字符串,而不是 $file 的值:
<xsl:variable name="error">Error reading: {$file}</xsl:variable>
用例在 otherwise 块中以捕获失败的文件读取:
<xsl:otherwise>
<xsl:variable name="error" select="'Error reading: ' || $file"/>
<xsl:message>{$error}</xsl:message>
{$error}
</xsl:otherwise>
嵌入的文本元素是强制性的吗?为什么消息元素不需要这个?
这是一个错误。请观看错误跟踪器
https://saxonica.plan.io/issues/3748
坚持到底直到解决。
解决方法是添加属性 as="xs:string"
。事实上,无论如何添加它可能是一个好主意,因为该变量几乎肯定是用作字符串(而不是用作包含单个文本节点子节点的文档节点,这是没有 "as" 属性).