Я ищу расширение функции doc (), доступной в настоящее время в SAXON таким образом, чтобы она считывала XML не из файловой системы или из сети http, а из памяти, где у меня есть эти xmls.
Я хочу использовать его следующим образом:
mydoc('id')/root/subroot/@myattr
или
doc('mydoc://id')/root/subroot/@myattr
Что я рассмотрел до сих пор:
- use queryEvaluator.setContextItem () - не решает мой вариант использования, так как я могу иметь несколько источников XML в одном запросе
- зарегистрировать некоторый собственный протокол схемы URL в Java - мне кажется излишним, и я никогда не делал этого
- написать собственную ExtensionFunction - кажется, правильный путь до сих пор, но я запутался, должен ли я использовать ExtensionFunction или скорее ExtensionFunctionDefinition.Также меня немного смущает исходный код Doc_1 и Doc Saxonica, так как он использует Atomizer и другие неизвестные внутренние компоненты.
Итак, вопросы:
- Является ли вариант 3 лучшим (в смысле простоты) или вы бы порекомендовали какой-то другой подход??
- Можно ли использовать ExtensionFunction и вернуть XdmNode из моего xmls в памяти?Мне кажется, это должно сработать, но я действительно не хочу вмешиваться в некоторые крайние случаи или саксонское минное поле.
Любой комментарий от опытного саксонского пользователя будет оценен.