Я хочу добавить пользовательскую функцию расширения xpath к трансформатору Saxon-HE. Эта настраиваемая функция должна принимать один или несколько аргументов. Давайте используем аналогию конкатенации строк для конкатенации одного или нескольких аргументов строки. После пробы на саксонской странице, я написал следующий код:Как реализовать последовательность конкатенации, как функция расширения с неизвестными аргументами, используя Saxon-HE?
ExtensionFunction myconcat = new ExtensionFunction() {
public QName getName() {
return new QName("http://mycompany.com/", "myconcat");
}
public SequenceType getResultType() {
return SequenceType.makeSequenceType(
ItemType.STRING, OccurrenceIndicator.ONE
);
}
public net.sf.saxon.s9api.SequenceType[] getArgumentTypes() {
return new SequenceType[]{
SequenceType.makeSequenceType(
ItemType.STRING, OccurrenceIndicator.ONE_OR_MORE)};
}
public XdmValue call(XdmValue[] arguments) throws SaxonApiException {
//concatenate the strings here....
String result = "concatenated string";
return new XdmAtomicValue(result);
}
};
я бы ожидать, что следующее выражение XPath будет работать в XSL файл
<xsl:value-of select="myconcat('a','b','c','...')">
К сожалению, я получил следующее исключение:
XPST0017: Function myconcat must have 1 argument
Каков правильный способ создания пользовательской функции для этого варианта использования?
Спасибо.
Такие аргументы называются varargs, а Saxon [по-видимому] (http://stackoverflow.com/questions/26237239/does-saxon-9-supports-java-varargs-in-extension-functions) не поддерживает эти аргументы. Возможный дублирующий вопрос. – predi
Возможно, мне показалось, что это вопрос, основанный на размышлении. –