如何将arraylist从Java传递到xsl并访问xsl中的单个arraylist元素?

如何将arraylist从Java传递到xsl并访问xsl中的单个arraylist元素?,java,xslt,Java,Xslt,我使用transformer.setParameter将一个arraylist从Java传递到Xsl ArrayList books=new ArrayList<String>; transformer.setparameter("booksinXSL","books"); 现在我需要在XSL中访问这个数组的元素 <xsl:param name="booksinXSL"> 现在,如果我在XSL中使用这行代码,它会抛出一个错误:ArrayList到NodeSet的转换无

我使用transformer.setParameter将一个arraylist从Java传递到Xsl

ArrayList books=new ArrayList<String>;
transformer.setparameter("booksinXSL","books");
现在我需要在XSL中访问这个数组的元素

<xsl:param name="booksinXSL">
现在,如果我在XSL中使用这行代码,它会抛出一个错误:ArrayList到NodeSet的转换无效

<value-of select="$booksinXSL[0]">
但是如果我将其设置为下面的行,它将毫无错误地打印整个数组[book1,book2]

<value-of select="$booksinXSL">

XSL没有定义数组的概念,但是您可以定义一个变量来包含一组节点,然后遍历这些节点。您可以在第页看到一个有用的示例。

您使用的是哪个XSLT处理器?错误消息中对NodeSet的引用表明它是一个1.0处理器,但您已经标记了问题XSLT-2.0。请注意,从Java类型到XPath类型的映射没有任何标准定义,它们因XSLT处理器而异。谢谢Michael。我正在使用XSLT 1.0。我已经编辑了您的问题,以删除误导性的XSLT-2.0标记。但确实存在几种基于Java的XSLT 1.0处理器,从Java到XPath/XSLT类型的映射取决于您使用的是哪种类型。参数的具体内容是什么注意,在XSLT中,节点从1开始编号,因此select=$node set[0]永远不会选择任何内容。但这不太可能是问题所在,因为您会遇到一个错误。如果您使用transformer.setparameter方法将数组从java传递到xslt,则不可能像我在问题中提到的那样进行迭代。在传递数组后,您需要迭代节点集。