2

这里的官方文档只是说,“匹配可能是标签名称或路径”,但我在任何地方都没有看到“路径”的定义。通过查看网络上的示例,我收集到它是一些精简的 XPath 类表示法,但不清楚究竟允许什么 - 例如,路径应该以 a /、 a//还是根本没有分隔符开头?我可以用 指定属性[@att = "value"]吗?

4

1 回答 1

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有一个更新的表格。它看起来并没有太大的不同。

于 2012-07-30T23:50:50.803 回答