/ / xslt 2.0: usando o HashMap - xslt, xslt-2.0

xslt 2.0: usando o HashMap - xslt, xslt-2.0

Eu tenho um método java que retorna um mapa para xslt.

Chamada do método XSLT -

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

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

Como faço para buscar o valor da lista do mapa no XSLT 2.0? Eu tentei atribuir os valores a uma variável usando o formato abaixo,

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

mas eu tenho a exceção abaixo.

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

Se eu tentar mostrar o valor de $ mapValue, ele imprime bem.

Respostas:

0 para resposta № 1

A mensagem de erro mostra que você está usando o Saxon. As regras para conversão entre objetos Java e valores XPath dependem de qual processador você usa, portanto, isso é relevante.

Se você estiver usando o Saxon, terá acesso ao XSLT 3.0 e aos novos tipos de dados de mapa / matriz, o que significa que você pode alcançar o que está tentando alcançar sem chamar o Java.

O erro específico que você está recebendo é porque (comoa mensagem diz) $ mapValue não é um nó, então você não pode "t acessar seus filhos usando o operador" / ". Se você usar um mapa XSLT 3.0, então você pode acessar uma entrada usando, por exemplo $mapValue?a.