使用lxml.etree从n-1节点获取值

时间:2018-04-20 08:02:07

标签: python lxml

我有这个问题:

<root>
  <test>
    <criteria nom="DR">
        <abbr>DR</abbr>
        <value>0.123456</value>
    </criteria>
    <criteria nom="MOTA">
        <abbr>MOTA</abbr>
        <value>0.132465</value>
    </criteria>
    <criteria nom="PFR">
        <abbr>PFR</abbr>
        <value>0.914375</value>
    </criteria>
  </test>
  <test>
    <criteria nom="DR">
        <abbr>DR</abbr>
        <value>0.655425</value>
    </criteria>
    <criteria nom="MOTA">
        <abbr>MOTA</abbr>
        <value>0.766545</value>
    </criteria>
    <criteria nom="PFR">
        <abbr>PFR</abbr>
        <value>0.943154</value>
    </criteria>
  </test>
</root>

我需要逐个获取值

0.655425
0.766545
0.943154

能够将它们与值&#34; 0.25&#34;。

进行比较

- 编辑 -

我已经尝试通过在主树中循环来获取值,如下所示:

tree = etree.fromstring(the tree above)
root = tree.getroot()
for test in root.findall("test"):
  for criteria in test.findall(criteria):
    value = criteria.findall("value").text()

但这不起作用。

2 个答案:

答案 0 :(得分:1)

使用 xml模块。并使用enumerate

<强>实施例

import xml.etree.ElementTree as ET
tree = ET.fromstring(s)
for i, content in enumerate(tree.findall(".//test")):
    if i % 2 != 0:
        for val in content.findall("criteria/value"):
            print(val.text)

<强>输出:

0.655425
0.766545
0.943154

答案 1 :(得分:1)

使用lxml and XPath

from lxml import etree

tree = etree.parse(open("so.xml"))
for value in tree.xpath("/root/test[2]/criteria/value"):
    print(value.text)