2

私はしばらくの間ElementTreeを使用してきましたが、そのシンプルさから気に入っています。

しかし、私はxパスの実装に疑問を持っています

これはXMLファイルです

<a>
  <b name="b1"></b>
  <b name="b2"><c/></b>
  <b name="b2"></b>
  <b name="b3"></b>
</a>

Pythonコード

import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
root.findall("b[@name='b2' and c]")

プログラムはエラーを表示します:

invalid predicate

しかし、私が使用する場合

root.findall("b[@name='b2']") or 
 root.findall("b[c]")

できます、

4

2 に答える 2

5

ElementTreeは、XPath式の限定的なサポートを提供します。目標は、省略された構文の小さなサブセットをサポートすることです。完全なXPathエンジンは、コアライブラリの範囲外です。

(F. Lundh、ElementTreeでのXPathサポート。)

XPath(1.0)をサポートするElementTree実装については、LXMLを確認してください。

>>> s = """<a>
  <b name="b1"></b>
  <b name="b2"><c /></b>
  <b name="b2"></b>
  <b name="b3"></b>
</a>"""
>>> from lxml import etree
>>> t = etree.fromstring(s)
>>> t.xpath("b[@name='b2' and c]")
[<Element b at 1340788>]
于 2012-06-11T14:58:11.160 に答える
3

XPathサポートに関するElementTreeのドキュメントから。:

ElementTreeは、XPath式の限定的なサポートを提供します。目標は、省略された構文の小さなサブセットをサポートすることです。完全なXPathエンジンは、コアライブラリの範囲外です。

実装に制限があることを発見しました。代わりにlxmlを使用できます。XPath1.0を完全にサポートするElementTree互換のインターフェースを提供します。

于 2012-06-11T14:58:29.823 に答える