2013-11-26 2 views
0

Я использую Saxon-He v.9.5.1-2 для XSLT, и мне нужна пользовательская функция Java, которая позволила бы мне вернуть несколько значений (предпочтительно карту значений) за один вызов. Можно ли это достичь?Пользовательская функция Java Saxon XSLT возвращает несколько значений

Я думал о расширении класса 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

Карты не поддерживаются в 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); 
+0

Именно это я и искал, спасибо! – pempek

Смежные вопросы