【问题标题】:Find all elements in ElementTree by attribute using Python使用 Python 按属性查找 ElementTree 中的所有元素
【发布时间】:2015-10-15 06:19:51
【问题描述】:

我有一个xml,它有很多不同的节点,带有不同的标签,但属性相同。是否有可能找到所有这些节点?

我知道,如果所有节点都具有相同的标签,则可以按属性找到所有节点:

root.findall(".//tag[@attrib]")

但就我而言,它们都有不同的标签。像这样的东西不起作用:

root.findall(".//[@attrib]")

【问题讨论】:

    标签: python python-2.7 lxml elementtree


    【解决方案1】:

    在 XPath 中你可以使用* 来引用任何名字的元素,你可以使用@* 来引用任何名字的属性:

    root.findall(".//*[@attrib]")
    

    旁注:

    提醒一下,如果你真的在使用lxml(不只是不小心用 标记了问题),我建议使用xpath() 方法而不是findall()。前者有更好的 XPath 支持。例如,当您需要查找有限名称集合中的元素时,例如 foobar,您可以使用以下 XPath 表达式和 xpath() 方法:

    root.xpath("//*[self::foo or self::bar][@attrib]")
    

    上面相同的表达式在传递给findall() 时会导致错误:

    SyntaxError: 在前缀映射中找不到前缀'self'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 2018-09-01
      • 2021-10-19
      相关资源
      最近更新 更多