如何在 XSLT 中迭代列表(例如 ArrayList)
How to Iterate List (e.g. ArrayList) in XSLT
我有一个名为 myList 的字符串列表,并且
我想使用迭代在标记中设置 XSLT 中的所有值:-
<alpha>
...
</alpha>
怎么做到的?
XSLT 1.0 在其数据模型中没有数据结构来表示字符串序列;它支持的唯一 "collection" 结构是节点集。如果您绝对依赖 XSLT 1.0,那么您将不得不将字符串包装为 XML 元素并传入包含这些元素的文档。
但是您正在使用 Java,因此您可以通过安装 Saxon 来访问 XSLT 2.0 和 XSLT 3.0,因此尝试并接受这些限制是没有意义的。 XSLT 2.0 极大地扩展了支持的数据类型集(包括 "sequence of strings" 作为许多可能性之一),XSLT 3.0 进一步扩展它以包括映射。 Saxon 从 Java 数据类型到 XSLT/XPath 数据类型的映射包括将 Java List<String>
转换为 XPath xs:string*
.
的可能性
使用 Saxon,您可以将参数声明为期望的字符串列表:
<xsl:param name="in" as="xs:string*"/>
然后您可以提供实际值 a List<String>
,它按此处所述进行转换:
http://www.saxonica.com/documentation/index.html#!extensibility/functions/function-result
在 XSLT 中,您可以将这些字符串包装为元素(我在这里使用了 XSLT 3.0 语法):
<xsl:for-each select="$in">
<alpha>{.}</alpha>
</xsl:for-each>
[免责声明:我是 Saxon 的首席开发人员]
我有一个名为 myList 的字符串列表,并且 我想使用迭代在标记中设置 XSLT 中的所有值:-
<alpha>
...
</alpha>
怎么做到的?
XSLT 1.0 在其数据模型中没有数据结构来表示字符串序列;它支持的唯一 "collection" 结构是节点集。如果您绝对依赖 XSLT 1.0,那么您将不得不将字符串包装为 XML 元素并传入包含这些元素的文档。
但是您正在使用 Java,因此您可以通过安装 Saxon 来访问 XSLT 2.0 和 XSLT 3.0,因此尝试并接受这些限制是没有意义的。 XSLT 2.0 极大地扩展了支持的数据类型集(包括 "sequence of strings" 作为许多可能性之一),XSLT 3.0 进一步扩展它以包括映射。 Saxon 从 Java 数据类型到 XSLT/XPath 数据类型的映射包括将 Java List<String>
转换为 XPath xs:string*
.
使用 Saxon,您可以将参数声明为期望的字符串列表:
<xsl:param name="in" as="xs:string*"/>
然后您可以提供实际值 a List<String>
,它按此处所述进行转换:
http://www.saxonica.com/documentation/index.html#!extensibility/functions/function-result
在 XSLT 中,您可以将这些字符串包装为元素(我在这里使用了 XSLT 3.0 语法):
<xsl:for-each select="$in">
<alpha>{.}</alpha>
</xsl:for-each>
[免责声明:我是 Saxon 的首席开发人员]