lxml的问题

时间:2013-11-15 07:08:45

标签: python lxml

我有一个Debian 6设置,我不会碰太多。

$ python --version
Python 2.6.6
$ dpkg --list|grep lxml
ii  python-lxml                        2.2.8-2 

我试图像这样访问XPath:

import xml.etree.ElementTree as ET
root = ET.parse("a.xml")

for e in root.findall('.//rec/data/field[@name="id"]'):
    print(e.tag + " " + e.attrib.get('name'))

我收到了错误

Traceback (most recent call last):
  File "a.py", line 4, in <module>
    for e in root.findall('.//rec/data/field[@name="id"]'):
  File "/usr/lib/python2.6/xml/etree/ElementTree.py", line 647, in findall
    return self._root.findall(path)
  File "/usr/lib/python2.6/xml/etree/ElementTree.py", line 355, in findall
    return ElementPath.findall(self, path)
  File "/usr/lib/python2.6/xml/etree/ElementPath.py", line 198, in findall
    return _compile(path).findall(element)
  File "/usr/lib/python2.6/xml/etree/ElementPath.py", line 176, in _compile
    p = Path(path)
  File "/usr/lib/python2.6/xml/etree/ElementPath.py", line 93, in __init__
    "expected path separator (%s)" % (op or tag)
SyntaxError: expected path separator ([)

python-lxml 2.2.8不支持这种XPath语法吗?

哪个版本支持这个并且与python 2.6兼容?

1 个答案:

答案 0 :(得分:1)

代码使用的是ElementTree,而不是lxml

findall的{​​{1}}方法仅支持xpath的子集。 (XPath support in ElementTree)。

ElementTree API 1.3也支持

ElementTree ElementTree API在Python 2.7 中更新为1.3。


替换以下行:

[@attrib="value"]

使用:

import xml.etree.ElementTree as ET

使用import lxml.etree as ET