我需要根据输入生成固定数量语言的 XML 结构,该输入可能包含也可能不包含每种语言的信息。如果信息丢失,我需要生成空元素。问题是,我需要在输出结构中的许多地方迭代语言。
最简单的方法是使用类似的东西
<xsl:variable name="languages" select="en,de,fr">
<xsl:for-each select="$languages">
...
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
循环出现在我需要语言列表的任何地方。
当然这不起作用,因为select="en,de,fr"没有定义节点列表。通过扩展我可以使用node-set函数,但我仍坚持使用 XSLT-1.0。
有没有办法定义一个常量节点集来迭代?
(这在某种程度上与另一个问题有关,其中接受的答案消除了创建常量节点集的许多想法,特别是需要 的子元素的所有内容<xsl:variable/>)
如果您想要一个常量节点集而不是其内容由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']/*" />
Run Code Online (Sandbox Code Playgroud)
这仅适用于静态值,例如,如果您有<xsl:variable name="foo"><xsl:for-each ...>,那么从技巧中获得的节点集document('')将是xsl:for-each元素,而不是评估它的结果。
| 归档时间: |
|
| 查看次数: |
3986 次 |
| 最近记录: |