XSLT2.0-迭代Java对象列表

XSLT2.0-迭代Java对象列表,java,xslt,xslt-2.0,Java,Xslt,Xslt 2.0,我有一个XSL,用于创建XML的副本,但在XML的某些元素中添加了一些属性。XSL调用一个Java函数,该函数返回CInfo类型的对象列表(Java.util.list),CInfo类型目前是一个非常简单的类,定义如下: public class CInfo { public int getNewVal() { return 12345; } } 我现在面临XSL中以下代码片段的问题: <?xml version="1.0" encoding="UTF-8

我有一个XSL,用于创建XML的副本,但在XML的某些元素中添加了一些属性。XSL调用一个Java函数,该函数返回CInfo类型的对象列表(Java.util.list),CInfo类型目前是一个非常简单的类,定义如下:

public class CInfo {
    public int getNewVal() {
        return 12345;
    }
}
我现在面临XSL中以下代码片段的问题:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
    xmlns:list="java.util.List"
    xmlns:saxon="http://saxon.sf.net/"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    ...
    ...>

...
<xsl:variable name="infoList"
    select="up:computeUpdates($updator)"/>

<xsl:for-each select="$infoList">
    <xsl:variable name="cinfo" select="."/>
    <xsl:variable name="newVal" select="ci:getNewVal($cinfo)"/>
...
...
</xsl:for-each>

不知何故,XSL似乎无法迭代infoList。奇怪的是,我正在处理的代码库中的一个现有XSL对每个类都有一个非常相似的值,并且能够迭代另一个类的Java对象列表(尽管类似于CInfo),并且似乎没有给出任何问题。我错过什么了吗?让XSLT迭代Java对象列表的标准过程是什么?有什么例子可以帮助我吗?我试着在网上搜索这种循环的例子和可能解决上述问题的方法,但到目前为止都没有成功。

您还没有向我们展示出现错误的第89行。我的猜测是,它可能包含形式的表达式

$infoList/XXXXX


由于“/”的lh操作数必须是一个节点序列,

或者每个的
中的任何相对XPath表达式(其上下文“节点”是一个
CInfo
对象,而不是节点),所以失败了。感谢您的快速响应!我完全忽略了这样一个事实,即错误在每个块的内部都有一行(#89),而不是每个块本身。这句话的意思是:
,正如迈克尔和伊恩正确指出的那样,这个表达是不正确的。将select表达式修改为
“$topNode/Elem1/Elem2[@low=$a]/…”
后,XSL似乎正在工作。谢谢你的帮助!
Error on line 89
  XPTY0019: Required item type of first operand of '/' is node(); supplied value has item
  type java:com.mproj.mpkg.CInfo
  at xsl:for-each (#76)
     processing "com.mproj.mpkg.."
  at xsl:apply-templates (#48)