Я использую пакет Saxon s9api для поиска XPath.Java XPath - Limit Scope - Saxon s9api
Я хочу ограничить свой поиск только одним узлом и его потомками.
<root>
<b>
<a>foo</a>
</b>
<b>
<a>bar</a>
</b>
</root>
Я прошел/корень/б [2] в качестве XdmNode (bNode), и я пытаюсь искать под ним.
XPathSelector selector = new Processor(false).newXPathCompiler().compile(xPath).load();
selector.setContextItem(bNode);
selector.evaluate()
Но я всегда получаю результаты от корня документа!
Я попытался следующие XPaths:
- /B/A -> ничего не возвращает
- б/у -> ничего не возвращает
- ./b/a - > Возвращает ничего
- // b/a -> Возвращает оба элемента
Примечание: Я знаю, что могу получить переданный индекс XdmNode и поместить его в свой XPath. Но я хочу выполнить поиск из данного XdmNode, чтобы он мог быть выполнен для любого узла в любом документе, и мне не нужно беспокоиться о том, как был найден этот узел.
Оба работали. Спасибо! И здесь я думал, что моя проблема связана с ** Java/Saxon **, а не ** XPath **. :/ – BrandonDude
Чтобы усилить этот ответ: выражение пути, начинающееся с «/», ищет документ, содержащий элемент контекста, * не * поддерево, укорененное в элементе контекста. Для поиска поддерева, внедренного в элемент контекста, он должен начинаться с «./» (или просто с шага оси). –