我有一個XSL,用於創建XML的副本,但只添加了一些屬性添加到XML中的某些元素。該XSL調用返回類型CINFO的對象是列表(java.util.List中)的Java函數目前定義爲一個非常簡單的類如下:XSLT 2.0 - 迭代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的只是一個實例列表。問題出現的的xsl:for-每個它提供了以下錯誤:
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對於每個都有一個非常類似的,並且能夠遍歷另一個類的Java對象列表(類似於CInfo,但是),似乎沒有給出任何問題。我錯過了什麼嗎?使XSLT迭代Java對象列表的標準過程是什麼?任何可以幫助我的例子嗎?我試圖在網絡上搜索這種循環的例子,並提出瞭解決上述問題的可能的解決方案,但目前爲止尚未成功。
或實際上'for-each'(其上下文「節點」是'CInfo'對象,而不是節點)內的任何相對XPath表達式。 –
感謝您的快速響應!我完全錯過了錯誤是由_for-each_塊內的一行(#89)而不是_for-each_本身造成的。該行具有以下內容: ' 正如Michael和Ian正確指出的那樣,是不正確的。將_select_表達式修改爲'「$ topNode/Elem1/Elem2 [@low = $ a]/..」後,XSL似乎正在工作。謝謝您的幫助! –
so1