2013-11-26 72 views
0

對於XSLT,我使用Saxon-He v.9.5.1-2,我需要一個自定義Java函數,它可以讓我在一次調用中返回多個值(最好是值的映射)。這有可能實現嗎?Saxon 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

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); 
+0

這正是我所尋找的,謝謝! – pempek