<xsl:variable name="dictFile" select="document('dictionary.xml')" />
<xsl:key name="lookupTable" match="$dictFile/dictionary/item" use="@name" />
<xsl:variable name="lookup1" select="key('lookupTable','lookupA')" />
<xsl:variable name="lookup2" select="key('lookupTable','lookupB')" />
这不能用Saxon 9.5 EE编译返回错误:
XTSE0340 XSLT Pattern syntax error at char 0 on line 55 in {$dictFile}:
A variable reference is not allowed in an XSLT pattern (except in a predicate)
不幸的是,我需要保持这些变量lookup1和lookup2按原样定义。我想在这里改变尽可能少的代码。它是在支持这些类型构造的自定义企业XSL引擎上运行的非常古老的大型代码库。
答案 0 :(得分:2)
标准XSLT 2.0中的正确方法是
<xsl:variable name="dictFile" select="document('dictionary.xml')" />
<xsl:key name="lookupTable" match="dictionary/item" use="@name" />
<xsl:variable name="lookup1" select="key('lookupTable','lookupA', $dictFile)" />
<xsl:variable name="lookup2" select="key('lookupTable','lookupB', $dictFile)" />
答案 1 :(得分:1)
在XSLT 2.0 specification和两个解决方案中讨论了这种确切的方案(向下滚动到示例:使用键引用其他文档部分)。