1

Saxon 9.3 (PE) から最新バージョンに切り替えています。拡張関数を使用しています (「extends ExtensionFunctionDefinition」を使用)

次のように定義された引数があります

public SequenceType[] getArgumentTypes() {                  
        return new SequenceType[] {SequenceType.ANY_SEQUENCE, SequenceType.ANY_SEQUENCE, SequenceType.NODE_SEQUENCE, SequenceType.SINGLE_STRING};

    }

XSLt では、たとえば最初の引数の変数を使用して呼び出しが行われます。これは構築された XML セクションです。

<xsl:variable name="graphXML">
                     <CHART>
                           <xsl:attribute name="FORMAT">PNG</xsl:attribute>
                           <xsl:attribute name="HEIGHT">
...
</xsl:variable>

お電話にて、

 private static class GrapheurCall extends ExtensionFunctionCall {

            private static final long serialVersionUID = 1L;

            @Override
             public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException {

ExtensionFunctionCall インターフェイスが変更されたため、コードを変更する必要がありました (以前は、

 public SequenceIterator call(SequenceIterator[] arguments, XPathContext context) throws XPathException { ...

)

私は今2つの問題を抱えています:

1) パラメータの型が SequenceIterator から Sequence に変更されました。そのような

NodeInfo dataNode = (NodeInfo) arguments[0].next();

使えなくなり、

NodeInfo dataNode = (NodeInfo) arguments[0];

実行時エラーが発生する

net.sf.saxon.value.SingletonItem cannot be cast to net.sf.saxon.om.NodeInfo

ただし、受け取ったオブジェクトは TinyTree です (実行時に行われるデバッグによる)。

2) 戻り値も異なります (SequenceIterator から Sequence へ) 以前は new ListIterator(saxon_result); を返していました。

これはもう不可能です (saxon_result は java.util.ArrayList です) そして、ここで、ArrayList をシーケンスとして送り返す方法がわかりません...

知識のある人はこれに光を当てることができますか? ありがとう!ファビアン

4

1 に答える 1