/ / xslt 2.0: utilisation de HashMap - xslt, xslt-2.0

xslt 2.0: utilisation de HashMap - xslt, xslt-2.0

J'ai une méthode Java qui renvoie une carte à xslt.

Appel de méthode XSLT -

<xsl:variable name="mapValue" select="class:returnMap()">

Méthode 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
}

Comment puis-je récupérer la valeur de liste de la carte dans XSLT 2.0? J'ai essayé d'attribuer les valeurs à une variable en utilisant le format ci-dessous,

<xsl:variable name="valueOfA" select="$mapValue/entry[@key="a"]"/>
<xsl:variable name="valueOfB" select="$mapValue/entry[@key="b"]"/>

mais j'ai eu l'exception ci-dessous.

XPTY0019: Required item type of first operand of "/" is node(); supplied value has item type java:java.util.LinkedHashMap

Si j'essaie d'afficher la valeur de $ mapValue, elle s'imprime correctement.

Réponses:

0 pour la réponse № 1

Le message d'erreur indique que vous utilisez Saxon. Les règles de conversion entre les objets Java et les valeurs XPath dépendent du processeur que vous utilisez, ce qui est pertinent.

Si vous utilisez Saxon, vous avez accès à XSLT 3.0 et aux nouveaux types de données map / array, ce qui signifie que vous pouvez réaliser ce que vous essayez d’atteindre sans faire appel à Java.

L'erreur spécifique que vous obtenez est parce que (commele message dit) $ mapValue n'est pas un noeud, vous pouvez donc "accéder à ses enfants en utilisant l'opérateur" / ". Si vous utilisez une carte XSLT 3.0, vous pouvez accéder à une entrée en utilisant, par exemple, $mapValue?a.