如何在Python中为某些标签解析XML文件?

问题描述 投票:0回答:1

Python:我正在使用xml.etree.ElementTree尝试解析XML文件。该文件如下所示(省略号是不重要的额外数据):

<root xmlns="ns1" xmlns:common="nscommon" ......>
   <item>
      <name> Foo </name>
      .
      .
      .
      <value>
         <min> 0 </min>
         <max> 5 </max>
      </value>
   </item>
   <item>
      <name> Bar </name>
      .
      .
      .
      <value>
         <min> 12 </min>
         <max> 31 </max>
      </value>
   </item>
</root>

我的目标是获得Foo的最小值和最大值。我无法编辑文件,因此项目不能有任何标识符。

我正在使用root.iter()浏览文件,因此我可以获得每个标签和值。但是,输出将是这样的:

Foo
1
2
10
0 <------- goal
5 <------- goal
Bar
Hi
123
9031
12
31

我不确定如何具体地隔离最小值和最大值,因为还会获取其他数字数据。上面写着“嘿,我们在看Foo,Foo之后但Bar之前的所有数字都属于Foo,这个数字是Min,这是Max”。用英语说起来比用代码说起来容易。谢谢!

python xml-parsing
1个回答
0
投票

这里是一个通用的解决方案,其中有一个示例读取XML字符串。如果要从XML文件获取根目录,则应该这样做:

tree = ET.parse(file_name)
root = tree.getroot()

代码:

import xml.etree.ElementTree as ET

xml_string = """
<root>
    <item>
        <name> Foo </name>
        <value>
            <min> 0 </min>
            <max> 10 </max>
        </value>
    </item>
</root>
"""

def find_max_min(root, name):
    for item_e in root.iter('item'):
        name_e = item_e.find('name')    
        if name_e.text.strip() == name:
            value_tag = item_e.find('value')
            min_val = int(value_tag.find('min').text)
            max_val = int(value_tag.find('max').text)
            return max_val, min_val

if __name__ == '__main__':
    root = ET.fromstring(xml_string)
    max_val, min_val = find_max_min(root, 'Foo')
    print('max: {}, min: {}'.format(max_val, min_val))
© www.soinside.com 2019 - 2024. All rights reserved.