获取(和求和)XML中名为“test”的所有属性的值

时间:2015-06-13 22:56:52

标签: python xml

示例XML doc:

<main>
  <this test="500">
    <that test="200"/>
  </this>
</main>

结果:700

我在本网站上发现的所有现有代码片段都依赖于标签。例如,如果您同时引用“this”和“test”,则只能获得“500”。我希望在整个doc / string中只搜索“test”。

我尝试过(并导致失败)的一些模块是lxml,xml.dom,ElementTree,xmltodict和BeautifulSoup,

1 个答案:

答案 0 :(得分:1)

我建议赞成lxml在python中解析XML。 lxml具有完整的xpath 1.0支持,xpath是专为查询XML而设计的语言/技术。

一旦你拥有了正确工作的合适工具,你就可以做到这样的事情:

import lxml.etree as et

xml = """<main>
  <this test="500">
    <that test="200"/>
  </this>
</main>"""
doc = et.fromstring(xml)
result = doc.xpath("sum(//@test)")
print(result)

输出

700.0

关于正在使用的xpath的简要说明:

  • //@test:在XML文档中的任意位置找到所有test属性。
  • sum():返回参数的总和