0

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オブジェクトのリストを反復処理するための標準的な手順は何ですか?ここで私を助けることができる例はありますか?私はそのようなループの例と言及された問題に対する可能な解決策をウェブで検索しようとしましたが、これまでのところ成功していません。

4

1 に答える 1

1

エラーが発生する89行目を表示していません。私の推測では、おそらくフォームの表現が含まれていると思います

$ infoList / XXXXX

(エラーメッセージで説明されているように)「/」のlhオペランドはノードのシーケンスである必要があるため、これは失敗します。

于 2012-12-19T17:29:04.580 に答える