2017-12-26 27 views
-1

xslt에 맵을 리턴하는 java 메소드가 있습니다.xslt 2.0 : HashMap 사용

XSLT 메서드 호출 -

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

자바 방법 -

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 
} 

가 어떻게 XSLT 2.0의 맵의 목록 값을 가져올 수 있습니까? i는 아래 형식을 이용하여 변수에 값을 할당하려 ,

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

을하지만, 내가 아래 예외를 얻었다.

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

$ mapValue 값을 표시하려고하면 인쇄가 잘됩니다.

+0

어떤 XSLT 2.0 프로세서를 사용합니까, 어떤 버전, 어떤 버전입니까? 예를 들어 귀하의 설명서를 확인하셨습니까? https://www.saxonica.com/html/documentation9.7/extensibility/ 또는 http://manual.altova.com/RaptorXML/raptorxmlserver/index.html?fxmisc_java.htm –

+0

또한 Saxon을 9.8 (모든 에디션) 당신은 XPath 3.1 맵과 함께 XSLT 3을 사용할 수 있습니다. https://www.saxonica.com/html/documentation/javadoc/net/sf를 사용하여 자바 맵을 XPath 3.1'맵 '으로 간단히 변환 할 수 있습니다 /saxon/s9api/XdmMap.html#makeMap-java.util.Map- 코드의 Java 측을 매핑하고이를 XSLT/XPath로 반환하면 https : // www에서'map : keys '와 같은 함수를 사용할 수 있습니다 .w3.org/TR/xpath-functions/# func-map-keys. Saxon HE의 경우 통합 확장 기능으로 함수를 구현하고 등록해야합니다. –

답변

0

오류 메시지는 Saxon을 사용하고 있음을 보여줍니다. Java 객체와 XPath 값 사이의 변환 규칙은 사용하는 프로세서에 따라 다르므로 적절합니다.

Saxon을 사용하는 경우 XSLT 3.0 및 새 맵/배열 데이터 유형에 액세스 할 수 있습니다. 즉, Java 호출을하지 않고도 달성하려는 목표를 달성 할 수 있습니다.

메시지가 나타내는 바와 같이 $ mapValue가 노드가 아니기 때문에 특정 오류가 발생하므로 "/"연산자를 사용하여 해당 자식에 액세스 할 수 없습니다. 대신 XSLT 3.0 맵을 사용하는 경우 예를 들어 $mapValue?a을 사용하여 항목에 액세스 할 수 있습니다.