1 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個贊
我將回答 Saxon 9.9,因?yàn)檫@是您真正應(yīng)該使用的版本。Saxon 9.7 中不存在該類XdmMap,因此使用該版本在 Java 和 XSLT 之間傳遞映射將變得困難或不可能。
您首先需要確定要返回的 XDM 類型:我假設(shè)這可能是map(xs:string, xs:string)*- 這是一系列以字符串為鍵、以字符串為值的映射。
您首先需要在您的getResultType()方法中將其聲明為結(jié)果類型。這樣做可能就足夠了:
public SequenceType getResultType() {
? ? return SequenceType.makeSequenceType(ItemType.ANY_MAP, OccurrenceIndicator.ZERO_OR_MORE);
}
這并不像它可能的那樣精確,但提供更精確的結(jié)果類型除了導(dǎo)致 Saxon 對函數(shù)實(shí)際返回的內(nèi)容進(jìn)行更仔細(xì)(和昂貴)的檢查之外不會實(shí)現(xiàn)任何其他目的。如果您想提供更精確的返回類型,則必須使用ItemTypeFactory.newMapType(...).
然后你的call()方法需要返回這個類型的一個實(shí)例。
您需要將每個 Employee 表示為XdmMap. 有兩種方法可以構(gòu)造XdmMap.
(a) 您可以構(gòu)建一個 Java HashMap<String, String>,然后使用靜態(tài)方法轉(zhuǎn)換它XdmMap.makeMap()
(b) 您可以逐步構(gòu)建地圖:
XdmMap map = new XdmMap();
map = map.put(new XdmAtomicValue("name"), new XdmAtomicValue("John Doe"));
map = map.put(new XdmAtomicValue("age"), new XdmAtomicValue("24"));
等。請注意,它XdmMap是不可變的,因此每個put()操作都會創(chuàng)建一個新XdmMap實(shí)例;原來是不變的。
最后,您需要構(gòu)建這些實(shí)例的序列XdmMap。最簡單的方法是構(gòu)造一個List<XdmMap>包含所有地圖的 Java,然后將其轉(zhuǎn)換為一個XdmValueusing new XdmValue(Iterable<...> items).
添加回答
舉報(bào)