Как использовать Xpath в Python?

Я решил эту проблему, добавив: Ddss.legacy.timezone.mode = true для обеих конфигураций:
... \ wso2ei-6.3.0 \ bin \ integrator.bat
... \ wso2ei-6.3.0 \ yajsw-stable-11.11 \ conf \ wrapper.conf
Ранее я забыл добавить эту запись в wrapper.conf, поскольку я запускаю WSO2 в качестве службы Windows.

215
задан Aminah Nuraini 24 April 2016 в 18:14
поделиться

8 ответов

libxml2 имеет много преимуществ:

  1. Соответствие к Активная разработка спецификации
  2. и участие сообщества
  3. Скорость. Это - действительно обертка Python вокруг реализации C.
  4. Повсеместность. libxml2 библиотека является распространяющейся и таким образом хорошо протестирована.

Оборотные стороны включают:

  1. Соответствие к спецификация . Это строго. Вещи как обработка пространства имен по умолчанию легче в других библиотеках.
  2. Использование собственного кода. Это может быть болью в зависимости от Вашего, как Ваше приложение распределяется / развернутый. RPMs доступны, которые упрощают часть этой боли.
  3. Ручная обработка ресурса. Отметьте в образце ниже вызовов к freeDoc () и xpathFreeContext (). Это не очень Pythonic.

, Если Вы делаете выбор простого контура, палку с ElementTree (который включен в Python 2.5). Если Вы нуждаетесь в полном соответствии спецификации или необработанной скорости и можете справиться с распределением собственного кода, пойдите с libxml2.

Образец Использования libxml2 XPath

<час>
import libxml2

doc = libxml2.parseFile("tst.xml")
ctxt = doc.xpathNewContext()
res = ctxt.xpathEval("//*")
if len(res) != 2:
    print "xpath query: wrong node set size"
    sys.exit(1)
if res[0].name != "doc" or res[1].name != "foo":
    print "xpath query: wrong node set value"
    sys.exit(1)
doc.freeDoc()
ctxt.xpathFreeContext()

Образец Использования ElementTree XPath

<час>
from elementtree.ElementTree import ElementTree
mydoc = ElementTree(file='tst.xml')
for e in mydoc.findall('/foo/bar'):
    print e.get('title').text
<час>
123
ответ дан Markus Safar 23 November 2019 в 04:21
поделиться

PyXML работает хорошо.

Вы не сказали, какую платформу Вы используете, однако если Вы находитесь на Ubuntu, можно получить его с sudo apt-get install python-xml. Я уверен, что другие дистрибутивы Linux имеют его также.

, Если Вы находитесь на Mac, xpath уже установлен, но не сразу доступный. Можно установить PY_USE_XMLPLUS в среде или сделать это Python путь перед импортом xml.xpath:

if sys.platform.startswith('darwin'):
    os.environ['PY_USE_XMLPLUS'] = '1'

В худшем случае Вам, вероятно, придется создать его самим. Этот пакет больше не сохраняется, но все еще создает прекрасный и работает с современным 2.x Python. Основные документы здесь .

3
ответ дан David Joyner 23 November 2019 в 04:21
поделиться

Последняя версия elementtree поддерживает XPath вполне прилично. Не будучи экспертом XPath я не могу сказать наверняка, если реализация полна, но она удовлетворила большинство моих потребностей при работе в Python. У меня есть также использование lxml и PyXML, и я нахожу etree хороший, потому что это - стандартный модуль.

ПРИМЕЧАНИЕ: я с тех пор нашел lxml, и для меня это - определенно лучший lib XML там для Python. Это делает XPath приятно также (хотя снова, возможно, не полное внедрение).

9
ответ дан jkp 23 November 2019 в 04:21
поделиться

lxml пакет поддержки xpath. Это, кажется, работает вполне прилично, хотя я испытал некоторые затруднения из-за сам:: ось. Существует также Амара , но я не использовал ее лично.

84
ответ дан MvG 23 November 2019 в 04:21
поделиться

Используйте LXML. LXML использует все возможности libxml2 и libxslt, но оборачивает их более "питоническими" привязками, чем привязки Python, которые являются родными для этих библиотек. Таким образом, он получает полную реализацию XPath 1.0. Собственный элемент ElemenTree поддерживает ограниченное подмножество XPath, хотя его может быть достаточно для ваших нужд.

39
ответ дан 23 November 2019 в 04:21
поделиться

Другим вариантом является PY-DOM-XPath , он работает без проблем с миниинком и чистый Python так работает на AppEngine.

import xpath
xpath.find('//item', doc)
28
ответ дан 23 November 2019 в 04:21
поделиться

Вы можете использовать:

PyXML :

from xml.dom.ext.reader import Sax2
from xml import xpath
doc = Sax2.FromXmlFile('foo.xml').documentElement
for url in xpath.Evaluate('//@Url', doc):
  print url.value

libxml2 :

import libxml2
doc = libxml2.parseFile('foo.xml')
for url in doc.xpathEval('//@Url'):
  print url.content
13
ответ дан 23 November 2019 в 04:21
поделиться

Другая библиотека - 4Suite: http://sourceforge.net/projects/foursuite/

Я не знаю, насколько она соответствует спецификации. Но для моего использования она работает очень хорошо. Выглядит заброшенной.

4
ответ дан 23 November 2019 в 04:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: