0

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

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>

我验证的computeUpdates()确实被 XSL 调用,它返回一个列表,其中只包含一个 CInfo 类型的实例。问题发生在xsl:for-each,它给出以下错误:

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)

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

4

1 回答 1

1

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

$信息列表/XXXXX

这是失败的,因为(如错误消息所述)“/”的 lh 操作数必须是节点序列。

于 2012-12-19T17:29:04.580 回答