我使用Saxon-He v.9.5.1-2进行XSLT,我需要一个自定义Java函数,让我在一次调用中返回多个值(最好是值映射)。这有可能实现吗?
我一直在考虑像这样扩展net.sf.saxon.lib.ExtensionFunctionDefinition类:
public class GetSth extends ExtensionFunctionDefinition {
@Override
public StructuredQName getFunctionQName() {
return new StructuredQName("bf", "http://some.url.com/", "get-sth");
}
@Override
public SequenceType[] getArgumentTypes() {
return new SequenceType[]{SequenceType.ATOMIC_SEQUENCE};
}
@Override
public SequenceType getResultType(SequenceType[] suppliedArgumentTypes) {
return SequenceType.NODE_SEQUENCE;
}
@Override
public ExtensionFunctionCall makeCallExpression() {
return new ExtensionFunctionCall() {
@Override
public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException {
Map<String, String> map = <my_map_here>;
/*
How to return multiple values? I would expect to return some class from net.sf.saxon.value package.
return ?
*/
}
};
}
}
如果地图不可能,那么如何返回列表呢?请指教。
答案 0 :(得分:0)
Saxon-HE不支持地图,因此您必须找到其他代表。您当然可以构造某种XML文档,或者您可以返回一个字符串列表,其中键/值对在微结构中表示为单个字符串,例如“key:value”,然后您可以在其中解析XSLT代码。例如:
List<StringValue> list = new ArrayList<StringValue>();
for (MapEntry m : map.entrySet()) {
list.add(new StringValue(m.getKey() + ":" + m.getValue());
}
return new SequenceExtent(list);