java - XALAN 注册扩展函数,就像 SAXON 中一样

标签 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());

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

谢谢!!

最佳答案

在 Java 代码中注册函数时,您仍然必须在样式表中声明 namespace ,不是吗?在这种情况下,我认为这样做之间没有太大的概念差异

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

关于java - XALAN 注册扩展函数,就像 SAXON 中一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3192412/

相关文章:

java - 如何使用 JavaSnoop 附加到 Java 小程序?

java - GridBagLayout 按钮.setVisible(真/假)

xml - 如何根据属性值选择 XmlElement?

java - 在调用父类(super class)的构造函数之前执行初始化是不可能的吗?

xml - XSL 选择变量标签

Java String.replace() 或 StringBuilder.replace()

java - 使用 struts2 jquery 插件填充选择标签

xml - 从 PowerShell 格式化 XML

java - Java 中极慢的 XSLT 转换

python - Python Flask 上有单例模式吗?