XPathをサポートするライブラリは何ですか?完全な実装はありますか?ライブラリはどのように使用されますか?そのウェブサイトはどこにありますか?
11 に答える
libxml2にはいくつかの利点があります。
- 仕様への準拠
- 積極的な開発とコミュニティへの参加
- スピード。これは実際にはC実装のPythonラッパーです。
- ユビキタス。libxml2ライブラリは広く普及しているため、十分にテストされています。
欠点は次のとおりです。
- 仕様への準拠。厳しいです。デフォルトの名前空間処理のようなものは、他のライブラリではより簡単です。
- ネイティブコードの使用。これは、アプリケーションの配布/展開方法によっては問題になる可能性があります。この痛みの一部を緩和するRPMが利用可能です。
- 手動のリソース処理。以下のサンプルでは、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
LXMLを使用します。LXMLはlibxml2とlibxsltの全機能を使用しますが、これらのライブラリにネイティブなPythonバインディングよりも多くの「Pythonic」バインディングでそれらをラップします。そのため、完全なXPath1.0実装を取得します。ネイティブElemenTreeは、XPathの限られたサブセットをサポートしますが、ニーズには十分な場合があります。
もう1つのオプションはpy-dom-xpathです。これは、minidomとシームレスに連携し、純粋なPythonであるため、appengineで動作します。
import xpath
xpath.find('//item', doc)
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
シンプルなsoupparser
fromを使用できますlxml
例:
from lxml.html.soupparser import fromstring
tree = fromstring("<a>Find me!</a>")
print tree.xpath("//a/text()")
elementtreeの最新バージョンは、XPath を十分にサポートしています。XPath の専門家ではないので、実装が完全かどうかはわかりませんが、Python で作業するときの私のニーズのほとんどは満たされています。lxml と PyXML も使用しましたが、標準モジュールである etree が優れていると思います。
注: それ以来、lxml を見つけました。私にとって、これは間違いなく Python 用の最高の XML ライブラリです。XPath もうまく機能します (ただし、完全な実装ではない可能性があります)。
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.
PyXMLはうまく機能します。
使用しているプラットフォームについては言及していませんが、Ubuntu を使用している場合は、sudo apt-get install python-xml
. 他の Linux ディストリビューションにもあると思います。
Mac を使用している場合、xpath は既にインストールされていますが、すぐにはアクセスできません。PY_USE_XMLPLUS
xml.xpath をインポートする前に、環境で設定するか、Python の方法で実行できます。
if sys.platform.startswith('darwin'):
os.environ['PY_USE_XMLPLUS'] = '1'
最悪の場合、自分で構築しなければならないこともあります。このパッケージはメンテナンスされなくなりましたが、ビルドは正常に行われ、最新の 2.x Python で動作します。基本的なドキュメントはこちらです。