问题描述
|
我想使用xpath表达式来获取属性的值。
我期望以下工作
from lxml import etree
for customer in etree.parse(\'file.xml\').getroot().findall(\'BOB\'):
print customer.find(\'./@NAME\')
但这给出了一个错误:
Traceback (most recent call last):
File \"bob.py\",line 22,in <module>
print customer.find(\'./@ID\')
File \"lxml.etree.pyx\",line 1409,in lxml.etree._Element.find (src/lxml/lxml.etree.c:39972)
File \"/usr/local/lib/python2.7/dist-packages/lxml/_elementpath.py\",line 272,in find
it = iterfind(elem,path,namespaces)
File \"/usr/local/lib/python2.7/dist-packages/lxml/_elementpath.py\",line 262,in iterfind
selector = _build_path_iterator(path,line 246,in _build_path_iterator
selector.append(ops[token[0]](_next,token))
KeyError: \'@\'
我期望这个工作正常吗?
解决方法
find
和findall
仅实现XPath的子集。它们的存在是为了与其他ElementTree实现(例如ElementTree
和cElementTree
)兼容。
相比之下,xpath
方法提供了对XPath 1.0的完全访问权限:
print customer.xpath(\'./@NAME\')[0]
但是,您可以改用get
:
print customer.get(\'NAME\')
或attrib
:
print customer.attrib[\'NAME\']