Пользовательская функция Java Saxon XSLT возвращает несколько значений

Я использую 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 ?
                */                  
            }
        };
    }
}

Если для карты это невозможно, как тогда вернуть список? Пожалуйста, порекомендуйте.


person pempek    schedule 26.11.2013    source источник


Ответы (1)


Карты не поддерживаются в Saxon-HE, поэтому вам придется найти другое представление. Вы, конечно, можете создать какой-либо XML-документ или вернуть список строк, в которых пары ключ / значение представлены в виде одной строки в микросинтаксисе, таком как «ключ: значение», который вы затем анализируете в Код XSLT. Например:

List<StringValue> list = new ArrayList<StringValue>();
for (MapEntry m : map.entrySet()) {
  list.add(new StringValue(m.getKey() + ":" + m.getValue());
}
return new SequenceExtent(list);
person Michael Kay    schedule 27.11.2013