244

XPathをサポートするライブラリは何ですか?完全な実装はありますか?ライブラリはどのように使用されますか?そのウェブサイトはどこにありますか?

4

11 に答える 11

131

libxml2にはいくつかの利点があります。

  1. 仕様への準拠
  2. 積極的な開発とコミュニティへの参加
  3. スピード。これは実際にはC実装のPythonラッパーです。
  4. ユビキタス。libxml2ライブラリは広く普及しているため、十分にテストされています。

欠点は次のとおりです。

  1. 仕様への準拠。厳しいです。デフォルトの名前空間処理のようなものは、他のライブラリではより簡単です。
  2. ネイティブコードの使用。これは、アプリケーションの配布/展開方法によっては問題になる可能性があります。この痛みの一部を緩和するRPMが利用可能です。
  3. 手動のリソース処理。以下のサンプルでは、​​freeDoc()とxpathFreeContext()の呼び出しに注意してください。これはあまりPythonicではありません。

単純なパス選択を行う場合は、ElementTree(Python 2.5に含まれています)を使用してください。完全な仕様への準拠または生の速度が必要で、ネイティブコードの配布に対応できる場合は、libxml2を使用してください。

libxml2XPathの使用例


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()

ElementTreeXPathの使用例


from elementtree.ElementTree import ElementTree
mydoc = ElementTree(file='tst.xml')
for e in mydoc.findall('/foo/bar'):
    print e.get('title').text

于 2008-08-26T13:06:39.587 に答える
86

lxmlパッケージは xpath をサポートしています。self:: 軸に問題がありましたが、かなりうまく機能しているようです。あまらもありますが、個人的には使っていません。

于 2008-08-12T11:40:13.630 に答える
40

LXMLを使用します。LXMLはlibxml2とlibxsltの全機能を使用しますが、これらのライブラリにネイティブなPythonバインディングよりも多くの「Pythonic」バインディングでそれらをラップします。そのため、完全なXPath1.0実装を取得します。ネイティブElemenTreeは、XPathの限られたサブセットをサポートしますが、ニーズには十分な場合があります。

于 2009-11-13T23:11:17.117 に答える
31

もう1つのオプションはpy-dom-xpathです。これは、minidomとシームレスに連携し、純粋なPythonであるため、appengineで動作します。

import xpath
xpath.find('//item', doc)
于 2010-01-23T09:30:19.943 に答える
15

You can use:

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
于 2010-08-23T13:00:01.183 に答える
10

シンプルなsoupparserfromを使用できますlxml

例:

from lxml.html.soupparser import fromstring

tree = fromstring("<a>Find me!</a>")
print tree.xpath("//a/text()")
于 2015-11-15T05:31:21.340 に答える
9

elementtreeの最新バージョンは、XPath を十分にサポートしています。XPath の専門家ではないので、実装が完全かどうかはわかりませんが、Python で作業するときの私のニーズのほとんどは満たされています。lxml と PyXML も使用しましたが、標準モジュールである etree が優れていると思います。

注: それ以来、lxml を見つけました。私にとって、これは間違いなく Python 用の最高の XML ライブラリです。XPath もうまく機能します (ただし、完全な実装ではない可能性があります)。

于 2008-08-14T09:48:59.547 に答える
3

Another library is 4Suite: http://sourceforge.net/projects/foursuite/

I do not know how spec-compliant it is. But it has worked very well for my use. It looks abandoned.

于 2010-08-23T12:57:47.803 に答える
2

PyXMLはうまく機能します。

使用しているプラ​​ットフォームについては言及していませんが、Ubuntu を使用している場合は、sudo apt-get install python-xml. 他の Linux ディストリビューションにもあると思います。

Mac を使用している場合、xpath は既にインストールされていますが、すぐにはアクセスできません。PY_USE_XMLPLUSxml.xpath をインポートする前に、環境で設定するか、Python の方法で実行できます。

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

最悪の場合、自分で構築しなければならないこともあります。このパッケージはメンテナンスされなくなりましたが、ビルドは正常に行われ、最新の 2.x Python で動作します。基本的なドキュメントはこちらです。

于 2008-08-12T19:34:44.127 に答える