Как разобрать выражения Xpath в Python? - PullRequest
0 голосов
/ 27 апреля 2018

Мне нужно проанализировать (, чтобы не оценивать ) выражения Xpath в Python, чтобы изменить их, например, У меня есть выражения, как

//div[...whatever...]//some-other-node...

и мне нужно изменить их (например):

/changed-node[@attr='value' and ...whatever...]/another-changed-node[@attr='value' ...

Как мне кажется, мне нужно разделить исходное выражение на шаги и шаги на оси + узлы и предикаты. Есть ли какой-нибудь инструмент, с которым я могу это сделать, или есть хороший и простой способ сделать это без него?

Загвоздка в том, что я не уверен, что предикаты исходных выражений не будут содержать что-то вроде [@id='some/value/with/slashes'], поэтому я не могу разобрать их с наивными регулярными выражениями.

1 Ответ

0 голосов
/ 27 апреля 2018

Возможно, вы сможете использовать генератор синтаксических анализаторов REx от Гюнтера Радемахера. См. http://www.bottlecaps.de/rex/. Это сгенерирует синтаксический анализатор для любой грамматики из подходящего BNF, и подходящий BNF для различных версий XPath доступен. REx - превосходная технология, испорченная только крайне плохой документацией. Он может генерировать анализаторы на нескольких языках, включая Javascript, XQuery и XSLT. Он используется в продукте Saxon-JS для анализа динамических выражений XPath в браузере.

Другой подход заключается в использовании преобразователей XQuery в XQueryX, доступных в W3C (XPath - это подмножество XQuery, поэтому они также будут обрабатывать XPath. Они создают представление синтаксического дерева в XML).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...