2010-07-07 71 views
1

我想通過XSLT使用XALAN轉換XML。現在,我想使用一個擴展功能,該功能必須在Java源代碼中SAXON補充,如:XALAN寄存器擴展功能像SAXON

方法:

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

在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

找到
+0

謝謝,但我不允許使用xmlns在xslt中添加類名。 (已經寫在問題中) – user274342 2010-07-07 11:24:21