Оцените Xpath2.0 в Python - PullRequest
       86

Оцените Xpath2.0 в Python

0 голосов
/ 08 октября 2018

У меня есть выражение XPath, как показано ниже.

if(replace(//p[1]/text(),'H','h') = 'hello') then //p[1]/text() else if(//p[1]/text() = 'world') then //p[2]/text() else 'notFound'

Я хочу показать, какое выражение «если» сработало.

e.g //p[1]/text() if first 'if' expression worked.

Выражение «Если» может быть вложенным, если,для циклов и функций xpath2.0.

Я не могу найти библиотеку xpath2.0 для python.Поэтому я попытался преобразовать эту библиотеку Js в python, но я могу разбить выражение xpath2.0 на лексеры, но не могу полностью преобразовать его в python.

Предложите мне какой-нибудь Xpath2.0библиотека для python, если есть.Также, как интерпретировать выражение XPath и отобразить, какая часть выражения работала?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Как уже упоминал Мартин, у нас есть саксонский продукт для языков C / C ++ / PHP, который называется Saxon / C и выпускается уже несколько лет.Мы видели пользователей, заинтересованных в использовании Saxon / C с Python.

Один пользователь успешно использовал Boost.Python для взаимодействия с нашей библиотекой C ++.Другой пользователь сделал взаимодействие по-другому: https://github.com/ajelenak/pysaxon

Мы надеемся сделать доступным официальный интерфейс Saxon / C для Python.

0 голосов
/ 07 ноября 2018

Как вы уже знаете, lxml , краеугольный камень поддержки Python XML / XPath, включает только

XPath 1.0, XSLT 1.0 и расширения EXSLT через libxml2 и libxslt

У нас еще есть несколько вариантов.

Я недавно исследовал эту тему (в частности, поддержку XQuery в Python).
См. W3C для справочного списка Реализации XML-запросов .

  1. Модули Python с расширениями XPath 2+ и EXSLT (например, EXSLT для регулярных выражений match ing)
    В PiPy есть некоторые модули , которые частично предлагаютФункциональность XPath 2.0+.

  2. Существуют некоторые OSS XML / NoSQL-СУБД, которые реализуют функции XPath / XQuery 2.0, например

    • Zorba , с открытым исходным кодомпереносимая встраиваемая реализация CQ для XQuery 1.0 / 2.0, которая имеет привязки Python (этот вопрос имеет несколько указателей),
    • , а также Sedna и некоторые коммерческие СУБД.В зависимости от вашего проекта, это может быть хорошим выбором.
  3. Я считаю Saxon / C ( Michael Kay ) сCython - самая перспективная дорога.Ранее это было опробовано на pysaxon .

  4. . Вы можете использовать подпроцесс для вызова CLI XML-процессора (как предложено здесь ), например subprocess.call(["saxon", "-o:output.xml", "-s:file.xml", "file.xslt"])

  5. Другой вариант - использование XSLT / XPath / XQuery с саксонами и / или другими Java XML классами в Jython .

  6. Наконец, вы можете настроить веб-сервис, который выполняет тяжелую работу за вас на языке, таком как Java, .NET и т. Д., Который поставляется с надлежащим XPath 3+.поддержка (также предложенная Kay здесь ).

Все еще несколько разочаровывает, особенно для большого языка, такого как Python.

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