我想用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中添加类。
谢谢!
答案 0 :(得分: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找到更多示例
答案 1 :(得分:0)
这里有来自Xalan项目的一些优秀文档:http://xml.apache.org/xalan-j/extensions_xsltc.html