XMLのコピーを作成することを目的としたXSLがありますが、XMLの特定の要素にいくつかの属性が追加されています。XSLは、CInfo型のオブジェクトのリスト(java.util.List)を返すJava関数を呼び出します。これは、現在、次のように定義されている非常に単純なクラスです。
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タイプのインスタンスを1つだけ含むリストを返します。この問題は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オブジェクトのリストを反復処理するための標準的な手順は何ですか?ここで私を助けることができる例はありますか?私はそのようなループの例と言及された問題に対する可能な解決策をウェブで検索しようとしましたが、これまでのところ成功していません。