XALAN寄存器扩展function,如SAXON

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

谢谢!!

在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的/库/ X-xalanextensions.html

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