官方文档here只是说,“匹配可能是标记名称或路径”,但我没有在任何地方看到“路径”的定义。通过查看网络上的示例,我收集了一些类似XPath的符号表示法,但目前还不清楚确切的内容 - 例如,路径应该以{{1}},/
开头,或根本没有分隔符?我可以使用//
指定属性吗?
答案 0 :(得分:3)
嗯,查看http://hg.python.org/cpython/file/2.7/Lib/xml/etree/ElementTree.py处的源代码,我们发现Element.find
已实现为
def find(self, path, namespaces=None):
return ElementPath.find(self, path, namespaces)
ElementPath
实现为
try:
from . import ElementPath
except ImportError:
ElementPath = _SimpleElementPath()
_SimpleElementPath
仅检查标记名称:
# emulate pre-1.2 find/findtext/findall behaviour
def find(self, element, tag, namespaces=None):
for elem in element:
if elem.tag == tag:
return elem
return None
让我们看看ElementPath.py:http://hg.python.org/cpython/file/f98e2944cb40/Lib/xml/etree/ElementPath.py它说明了,
# limited xpath support for element trees
所以我认为有效的XPath可能是find
的有效参数。我对XPath不太熟悉,无法准确确定它支持的内容,但http://effbot.org/zone/element-xpath.htm描述了它在五年前支持了多少,并包含了一个语法表。
ElementTree为XPath表达式提供有限的支持。目标是支持缩写语法的一小部分;完整的XPath引擎不在核心库的范围内。
http://docs.python.org/dev/library/xml.etree.elementtree.html#xpath-support有一个更新的表格。它看起来并没有太大的不同。