xslt-1.0迭代固定的值列表

时间:2014-04-03 13:49:14

标签: xslt xslt-1.0

我需要从输入生成固定数量语言的XML结构,该输入可能包含也可能不包含每种语言的信息。如果缺少信息,我需要生成空元素。问题是,我需要在输出结构中的许多地方迭代语言。

最简单的方法是使用类似

的东西
<xsl:variable name="languages" select="en,de,fr">
<xsl:for-each select="$languages">
...
</xsl:for-each>

循环出现在我需要语言列表的任何地方。

当然这不起作用,因为select="en,de,fr"没有定义节点列表。有了扩展名,我可以使用node-set函数,但我遇到了XSLT-1.0。

有没有办法定义一个常量节点集来迭代?

(这与another question有某种关系,其中接受的答案杀死了许多创建常量节点集的想法,特别是需要<xsl:variable/>的子元素的所有内容

1 个答案:

答案 0 :(得分:2)

如果您想要一个常量节点集而不是其内容由xsl:指令计算的节点集,那么您可以使用document('')进行操作,这样您就可以访问样式表本身的XML树:

<xsl:variable name="languagesLiteral">
  <lang>en</lang>
  <lang>de</lang>
  <lang>fr</lang>
</xsl:variable>

<xsl:variable name="languages"
     select="document('')//xsl:variable[@name='languagesLiteral']/*" />

这仅适用于静态值,如果您有<xsl:variable name="foo"><xsl:for-each ...>,那么您从document('')技巧获得的节点集将是xsl:for-each元素,而不是评估它的结果