簡體   English   中英

如何為 Python 中的某些標簽解析 XML 文件?

[英]How do I parse an XML file for certain tags in Python?

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()到 go,所以我可以得到每個標簽和值。 但是,output 將是這樣的:

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

我不確定如何具體隔離最小值和最大值,因為會抓取其他數字數據。 上面寫着“嘿,我們正在查看 Foo,Foo 之后但 Bar 之前的所有數字都屬於 Foo,這個數字是 Min,這是 Max”。 這在英語中比在代碼中更容易說。 謝謝!

這是一個通用解決方案,其中包含從 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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM