XALAN寄存器扩展功能,如SAXON

时间:2010-07-07 06:30:20

标签: java xml xslt saxon xalan

我想用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中添加类。

谢谢!

2 个答案:

答案 0 :(得分:0)

在java代码中注册函数时,你仍然需要在样式表中声明命名空间,不是吗?在那种情况下,我认为在做

之间存在很多概念上的区别
xmlns:ns="http://namespace"

或者

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

实现只需要包含一个静态函数,可以在http://xml.apache.org/xalan-j/extensions.html#ex-java-namespacehttp://www.ibm.com/developerworks/library/x-xalanextensions.html找到更多示例

答案 1 :(得分:0)

这里有来自Xalan项目的一些优秀文档:http://xml.apache.org/xalan-j/extensions_xsltc.html