You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java传递List<String>到XSLT 2.0遇问题:仅首个字符串值可获取

解决Java结合XSLT 2.0获取多字符串值的索引问题

你遇到的核心问题是Java返回的List<String>在XSLT中未被正确解析为字符串序列,导致仅能取到第一个元素,后续索引返回空值。这是因为多数XSLT处理器(如Saxon)默认不会将Java集合自动转换为XSLT的序列类型,而是把整个List当作单个节点处理。

以下是几种可行的解决方案:

方案1:修改Java函数返回数组而非List

将Java函数的返回类型从List<String>改为String[],XSLT处理器会自动将数组解析为字符串序列,索引访问即可正常工作:

Java代码调整

public static String[] myFunction(String inparam) {
    // 原逻辑生成List<String>后转为数组
    List<String> resultList = ...;
    return resultList.toArray(new String[0]);
}

XSLT代码保持不变

xmlns:fn="java:myFunction" <!-- Java函数返回String[] -->

<xsl:variable name="returnList" as="xsd:string*" select="fn:myFunction('inparam')" />
<element><xsl:value-of select="$returnList[1]"/></element>
<element><xsl:value-of select="$returnList[2]"/></element>

方案2:在XSLT中显式遍历List元素

若无法修改Java函数,可在XSLT中通过遍历方式获取所有元素,避免直接索引访问:

xmlns:fn="java:myFunction" <!-- Java函数返回List<String> -->

<xsl:for-each select="fn:myFunction('inparam')">
    <element><xsl:value-of select="."/></element>
</xsl:for-each>

方案3:使用处理器提供的集合转序列方法

以Saxon为例,可调用其扩展方法将List转换为XSLT序列:

xmlns:saxon="http://saxon.sf.net/"
xmlns:fn="java:myFunction"

<xsl:variable name="javaList" select="fn:myFunction('inparam')" />
<xsl:variable name="returnList" as="xsd:string*" select="saxon:list-to-sequence($javaList)" />
<element><xsl:value-of select="$returnList[1]"/></element>
<element><xsl:value-of select="$returnList[2]"/></element>

注意:使用该方法需确保XSLT处理器支持对应扩展,且配置允许外部函数调用。

内容的提问来源于stack exchange,提问作者TheUltimateHack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:32:10