【问题标题】:find xml element with multiple values查找具有多个值的 xml 元素
【发布时间】:2012-07-05 19:24:13
【问题描述】:

我可以使用 xml.etree.ElementTree 中的 element.findall() 在单个属性中查找具有多个值的元素吗?

我可以使用它来查找所有具有 class="day" 的 div 元素:

from xml.etree.ElementTree import ElementTree

calendar = ElementTree()
calendar.parse("calendar-week.xml")

calendar.findall('.//div[@class="day"]')

或者这个来查找所有带有 class="first day" 的 div 元素:

calendar.findall('.//div[@class="first day"]')

但是有没有办法在他们的类中找到所有带有“day”的 div 元素?我找不到任何有关如何执行此操作的文档。有没有办法在这里使用正则表达式?

<body>
   <div class="calendar-week">
      <div class="first day" id="su">Sunday</div>
      <div class="day" id="mo">Monday</div>
      <div class="day" id="tu">Tuesday</div>
      <div class="day" id="we">Wednesday</div>
      <div class="day" id="th">Thursday</div>
      <div class="day" id="fr">Friday</div>
      <div class="last day" id="sa">Saturday</div>
      <div class="clear-float"></div>
   </div><!-- /calendar-week -->
</body>    

【问题讨论】:

  • 发现this 有更多示例,例如来自@stranac 的示例,但它们都不适用于 xml.etree.ElementTree。也许 xml.etree 不支持所有的 xpath 选项?

标签: python xpath elementtree findall multiple-value


【解决方案1】:

这个 xpath 就是你通常会这样做的方式:

'//div[contains(concat(" ", @class, " "), " day ")]'

【讨论】:

  • 当我尝试这个或更简单的方法时:'.//div[contains(@class, "day")]' 我得到 SyntaxError: invalid predicate。
  • 感谢您提供 xpath 示例,基于它我发现我需要使用 lxml 模块,因为它具有完整的 xpath 支持。
  • 哦,抱歉,没注意到您使用的是xml.etree
  • 您的回答为我指明了正确的方向,非常感谢。
【解决方案2】:

此代码基于@stranac 的答案中提供的 xpath 术语工作

from lxml import etree as ET

calendar = ET.ElementTree()
calendar.parse("calendar-week.xml")

elem_list = calendar.xpath('//div[contains(concat(" ", @class, " "), " day ")]')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2019-03-29
    • 2016-10-04
    • 2022-01-12
    • 1970-01-01
    • 2019-12-06
    相关资源
    最近更新 更多