/ / xslt 2.0: używanie HashMap - xslt, xslt-2.0

xslt 2.0: używanie HashMap - xslt, xslt-2.0

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 № 1

Komunikat 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.