1

XALANを使ってXSLTでXMLを変換したい。拡張機能を使用したいのですが、この機能は SAXON のように Java ソースに追加する必要があります。

方法:

TransformerFactory tFactory = TransformerFactory.newInstance();
Configuration c = ((net.sf.saxon.TransformerFactoryImpl) tFactory).getConfiguration();
c.registerExtensionFunction(new FooExtension());

FooExtension:

public class FooExtension extends ExtensionFunctionDefinition {

    private static final long serialVersionUID = -8143237239412146617L;

    @Override
    public SequenceType[] getArgumentTypes() {
        return new SequenceType[] { SequenceType.EMPTY_SEQUENCE };
    }

    @Override
    public StructuredQName getFunctionQName() {
        return new StructuredQName("ns", "http://namespace", "generate-guid");
    }
}

しかし、XALAN (?FunctionTable?, ?FunctionResolver?, ?URIResolver?) でどのように機能するのか、ソースで行う必要があり、XSLT でクラスを追加することは許可されていません。

ありがとう!!

4

2 に答える 2

0

関数を Java コードに登録するとき、スタイルシートで名前空間を宣言する必要がありますね。その場合、行うことの間に概念的な違いはあまりないと思います

xmlns:ns="http://namespace"

または

xmlns:ns="xalan://package.classname"

実装には静的関数を含める必要があるだけです。その他の例は、 http: //xml.apache.org/xalan-j/extensions.html#ex-java-namespaceおよびhttp://www.ibm.com/にあります。 developerworks/library/x-xalanextensions.html

于 2010-07-07T11:14:38.950 に答える
0

この問題に関する Xalan プロジェクトの優れたドキュメントがいくつかあります: http://xml.apache.org/xalan-j/extensions_xsltc.html

于 2010-07-07T11:24:05.210 に答える