Mam metodę java, która zwraca mapę do xslt.
Wywołanie metody XSLT -
<xsl:variable name="mapValue" select="class:returnMap()">
Metoda Java -
public Map<String,List<String>> returnMap(){
Map<String,List<String>> map = new HashMap<String,List<String>>();
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
map.put("a",list);
map.put("b",list);
return map
}
jak pobrać wartość listy z mapy w XSLT 2.0? próbowałem przypisać wartości do zmiennej przy użyciu poniższego formatu,
<xsl:variable name="valueOfA" select="$mapValue/entry[@key="a"]"/>
<xsl:variable name="valueOfB" select="$mapValue/entry[@key="b"]"/>
ale mam wyjątek poniżej.
XPTY0019: Required item type of first operand of "/" is node(); supplied value has item type java:java.util.LinkedHashMap
jeśli spróbuję wyświetlić wartość $ mapValue, drukuje dobrze.
Odpowiedzi:
0 dla odpowiedzi № 1Komunikat o błędzie pokazuje, że używasz Saxona. Reguły konwersji między obiektami Java i wartościami XPath zależą od używanego procesora, więc jest to istotne.
Jeśli korzystasz z Saxona, masz dostęp do XSLT 3.0 i nowych typów danych map / tablic, co oznacza, że możesz osiągnąć to, co próbujesz osiągnąć bez wywoływania Javy.
Specyficzny błąd, który otrzymujesz, polega na tym, że (jakokomunikat mówi) $ mapValue nie jest węzłem, więc nie można uzyskać dostępu do jego dzieci za pomocą operatora "/" .Jeśli zamiast tego używasz mapy XSLT 3.0, możesz uzyskać dostęp do wpisu, na przykład za pomocą $mapValue?a
.