1

我想通过 XSLT 和 XALAN 转换 XML。现在我想使用一个扩展函数,这个函数必须像 SAXON 一样添加到 JAVA 源代码中:

方法:

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

Foo扩展:

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

这里的 Xalan 项目有一些关于这个问题的优秀文档:http: //xml.apache.org/xalan-j/extensions_xsltc.html

于 2010-07-07T11:24:05.210 回答
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

于 2010-07-07T11:14:38.950 回答