Чем больше я узнаю XPath тем больше мне нужно обратно refererencingНазад ссылки в XPath
Например, когда я обнаружил некоторую информацию в некоторых промежуточных шагов, я иногда необходимо использовать информацию позже. Эта проблема на самом деле имеет обходное решение с небольшой помощью способности выражения предикатов также содержать XPathes. Рабочий раствор может выглядеть как этот
/foo/item[@attrtocheck = ../../otheritem[@anotherattr]]
Но проблема такого подхода заключается в том, что я просто оценить предикат на некоторых критериях и не могу иметь несколько следующих результатов, основанные на этом. Даже если есть много других с тем же @anotherattr, я не могу их собирать. Таким образом, лучшим решением будет
/foo/item[@attrtocheck]/../../otheritem[@anotherattr=BACKREFERENCING_ATTRTOCHECK_VALUE]
но до тех пор, как я знаю, это невозможно.
Если в стандарте нет решения, возможно, есть расширение в некоторых инструментах/библиотеках? На самом деле я реализую свой собственный движок, и если уже существует нестандартный синтаксис, я бы его принял.
UPDATE: После того, как Майкл Кей комментарий, о том, почему я пропускаю эту функцию
На самом деле я imlementing поиск XPath для AST (абстрактные синтаксические деревья). Я не первый, кто пытается это сделать (веб-поиск по [Xpath AST]). Такой поиск показывает очень сильные отношения между различными частями дерева. Например, когда я нашел вызов в каком-то контексте (например, внутри какого-либо другого метода), я хотел бы знать, введен ли этот символ как виртуальная функция, и если он затем выводит его в результаты. В этом случае мой первый поиск создает некоторый ранее неизвестный символ (имя функции), и я хотел бы использовать его в следующих подпакетах (поиск объявления класса и его ключевые слова). Таким образом, обратная ссылка была бы очень полезной.
Я думаю, что если он применим к AST, тогда есть возможность иметь такие отношения в других структурированных данных.
Любая такая проблема может быть легко решена (вообще не проблема) в XPath 2.0. 'для $ attr in/foo/item [@attrtocheck] return/foo/otheritem [@ anotherattr = $ attr]' –
Сообщите нам, что вам действительно нужна функция, которой нет, не поможет, если вы не сообщите нам какую проблему вы пытаетесь решить. –
Я обновил вопрос, объяснив подробности – Maksee