Определите, действителен ли запрос XPath

Есть ли метод в Saxon или другой библиотеке, который скажет мне, является ли запрос XPath допустимым синтаксисом. Не в том случае, если он что-то вернет, не в том случае, если узлы существуют в файле XML, а в том, что это правильный синтаксис.

Мне нужно использовать это, чтобы определить, является ли запрос XPath или уравнением, которое мы обрабатываем сами.

спасибо - Дэйв


person David Thielen    schedule 26.01.2018    source источник
comment
Это метод генерирует исключение, если выражение не может быть скомпилировано.   -  person LMC    schedule 27.01.2018


Ответы (1)


Лучше всего вызвать XPathCompiler.compile () и перехватить исключение. Я знаю, что вас беспокоит стоимость исключений, но в Saxon нет возможности сделать это без исключений.

Обратите внимание, что фраза «допустимый синтаксис» требует уточнения. Метод compile () не только проверяет синтаксис, но также проверяет наличие других статических ошибок, таких как ссылки на переменные и функции, которые не существуют. Вы можете повлиять на эту проверку, предоставив подходящий статический контекст для синтаксического анализа.

person Michael Kay    schedule 27.01.2018
comment
К сожалению, IKVM делает этот подход медленным. Рассматривали ли вы TryParse (например, C # для анализа чисел и т. Д.)? - person David Thielen; 29.01.2018
comment
К сожалению, это было бы довольно существенное переписывание парсера (который намного больше, чем парсер для чисел!), Чтобы удовлетворить то, что определенно является довольно специализированным требованием. - person Michael Kay; 29.01.2018
comment
Да, у меня было плохое предчувствие, что это так. А как насчет метода вероятноXPath ()? Или это то, что доставит нам неприятности? - person David Thielen; 29.01.2018
comment
Поток в stackoverflow .com / questions / 36343209 / предлагает другой путь вперед: выбросить исключение, не содержащее трассировки стека, что намного дешевле. Но вся эта информация специфична для Java, я понятия не имею, как она переносится на код, кросс-скомпилированный IKVM в .NET. - person Michael Kay; 30.01.2018