Как установить переменную в запросе XPath в Saxon на Java - PullRequest
0 голосов
/ 04 августа 2020

Следующий код возвращает 4 узла (с использованием southwind. xml & southwind.xsd ):

XPathExecutable exec = datasource.getxPathCompiler().compile("/windward-studios/Employees/Employee[@EmployeeID < 5]");
XPathSelector selector = exec.load();
selector.setContextItem(datasource.getXmlRootNode());
XdmValue nodeSet = selector.evaluate();

Но следующий код возвращает 0 узлов:

datasource.getxPathCompiler().declareVariable(new QName("p1"));
XPathExecutable exec = datasource.getxPathCompiler().compile("/windward-studios/Employees/Employee[@EmployeeID < p1]");
XPathSelector selector = exec.load();
selector.setContextItem(datasource.getXmlRootNode());
selector.setVariable(new QName("p1"), new XdmAtomicValue(5));
XdmValue nodeSet = selector.evaluate();

Что я делаю не так?

Обновление: похоже, нужен знак $:

compile("/windward-studios/Employees/Employee[@EmployeeID < $p1]");

Это правильно?

1 Ответ

0 голосов
/ 05 августа 2020

Ссылки на переменные в XPath и XSLT начинаются с $, поэтому $p1 - правильный способ ссылки на переменную с именем p1 в XPath. Ваша предыдущая попытка p1 выберет узел элемента с именем p1.

...