Синтаксическая ошибка: XPath не является юридическим выражением - PullRequest
0 голосов
/ 22 сентября 2018

Как мне найти синтаксическую ошибку в сложных выражениях XPath, когда все, что мне сказали:

Синтаксическая ошибка: Данное выражение XPath //td[text()="ASIN"] || //li[contains(., "ASIN: ")] не являетсяюридическое выражение.

Мне бы очень хотелось знать

  • Как я могу решить эту проблему?
  • Как я могу исправить другие проблемы с синтаксисом XPath (безспросив здесь каждый раз)?

1 Ответ

0 голосов
/ 22 сентября 2018

Это паршивое диагностическое сообщение.

Ваша конкретная проблема с синтаксисом XPath

Вместо ||, что логично ИЛИ в некоторых языках, вы, вероятно, ищете |,это объединение узлов в XPath .(То есть, если вы не нацелены на оператор объединения строк * XP0 3.0 .)

Как найти и исправить проблемы с синтаксисом XPath в целом

  1. Используйте лучший инструмент. Диагностические сообщения трудно писать хорошо.Хотя в общем случае невозможно всегда точно указать, что нужно исправить, чтобы исправить синтаксическую ошибку, лучшие инструменты помогают больше всего.Если ваш инструмент показывает не более XPath syntax error, вы определенно можете узнать больше, попытавшись оценить ваш XPath с помощью лучшего инструмента:

    • oXygen XMLРедактор с использованием Saxon :

      Не удалось выполнить XPath из-за: Оператору конкатенации ('||') требуется включить XPath 3.0

    • http://videlibri.sourceforge.net/cgi-bin/xidelcgi

      err: XPST0003: эта языковая функция недоступна на выбранном языке.По крайней мере XQuery / XPath версии 3.0 требуется в: // td [text () = "ASIN"] ||[<- здесь раньше произошла ошибка] // li [содержит (., "ASIN:")] </p>

    • www.xpathtester.com / xpath :

      ОШИБКА - Не удалось оценить выражение XPath: javax.xml.transform.TransformerException: ожидался путь к местоположению, но обнаружен следующий токен: |

  2. Избегайте распространенных версий XPath 1 ошибок требований:

    1. XPath 1.0
    2. XPath 2.0 необходим для регулярных выражений, последовательностей.
    3. XPath 3.0 необходим для литералов пространства имен, ||,!, Встроенных анонимных функций.
    4. XPath 3.1 необходим для массивов и ассоциативных массивов.
  3. Используйте силу (BNF), Люк :Приведенные выше версии XPath ссылаются на соответствующие Рекомендации W3C XPath, которые включают в себя определенные правила грамматики, которые определяют допустимый синтаксис XPath.Знайте это хорошо, чтобы обнаружить / избежать синтаксических ошибок XPath.

1 К сожалению, XPath не имеет встроенного способа извлечения своей версии.Это оставляет два варианта: (1) знать версию, которую реализует язык, библиотека или приложение хостинга, основываясь на его документации, или (2) инициировать простое исследование (конечно же, с правильным синтаксисом), в котором используется функция, зависящая от версии.и посмотреть, если синтаксический избегается.

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