사용자 정의를 사용해 URIResolver를 사용하여 시도하고 XML 조각으로지도 값을 제공에서 찾을 수 있습니다.
class MapEntryResolver implements URIResolver
{
private Map<String,String> map = new HashMap<>();
private static final String PREFIX = "map://";
@Override
public Source resolve(String href, String base)
throws TransformerException
{
Source snippet = null;
String key = href.replace(PREFIX, "");
if(map.containsKey(key))
{
snippet = new StreamSource(new StringReader("<" + key + ">" + map.get(key) + "</" + key + ">"));
}
return snippet;
}
public void setMap(Map<String,String> map)
{
this.map = map;
}
}
xslt의 문서 기능을 사용하여지도 값에 액세스 할 수 있습니다.
<xsl:variable name="mapValue" select="document('map://foo')" />
샘플 :
//First create the resolver
MapEntryResolver uriResolver = new MapEntryResolver();
//pass your map
uriResolver.setMap(yourMap);
//and attach it to the factory
TransformerFactory factory = new TransformerFactoryImpl();
factory.setURIResolver(uriResolver);
Transformer transformer = factory.newTransformer(new StreamSource(this.getClass().getResourceAsStream(pathToYourXsl));
//start transform and store result
ByteArrayOutputstream result = new ByteArrayOutputstream();
transformer.transform(new StreamSource(pathToYourInputXml), new StreamResult(result));
를 사용해 URIResolver이 같은 요구에지도 데이터의 XML 조각을 작성하여 XSL에서
<key>value</key>
제공하여 조각을 얻을 수있는 문서 기능을 사용하여 지도 키를 매개 변수로 사용 :
<!-- variable contains snippet <foo>bar</foo> -->
<xsl:variable name="mapValue" select="document('map://foo')" />
<!-- use it like any other doc-->
<xsl:value-of select="$mapValue/foo"/>
"Java 맵을 변수에 전달"하는 자바 코드를 보여줄 수 있습니까? XSLT 측의 색슨 (Saxon)이'XdmValue'처럼 처리 할 수 있습니까? –