Функция расширения регистра XALAN, как в SAXON - PullRequest
1 голос
/ 07 июля 2010

Я хочу преобразовать XML с помощью XSLT с помощью XALAN. Теперь я хочу использовать функцию расширения, эта функция должна быть добавлена ​​в исходный код JAVA, как в 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.

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 07 июля 2010

Здесь есть отличная документация по проекту Xalan: http://xml.apache.org/xalan-j/extensions_xsltc.html

0 голосов
/ 07 июля 2010

При регистрации функции в вашем 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

...