如何使用 ElementTree 解析具有多个相同字段和嵌套数据的 XML 字符串?

How to parse XML string with multiple identical fields and nested data using ElementTree?

我正在从服务器获取 XML 数据,将其存储在一个字符串中,该字符串包含多个具有相同名称的字段以及嵌套数据。我该如何正确解析呢?这是它的外观示例。

 <Product>
     <ProductNumber>14432</ProductNumber>
     <CreationDate>2019</CreationDate>
     <ProductVersion>
        <Config>A</Config>
        <Design>1</Design>
        <DesignCreated>2018</DesignCreated>
        <DesignedBy>Jon</DesignedBy>
        <Design>2</Design>
        <DesignCreated>2019</DesignCreated>
        <DesignedBy>Doe</DesignedBy>
     </ProductVersion>
 </Product>

我目前所做的是

    import ElementTree as ET
    tree = ET.fromstring(content_string))

这里的问题是执行此操作时我无法访问 ProductVersion 中的任何数据。当我打电话给

  tree.find('ProductVersion') 

我明白了

   attrib: {}
   tag 'ProductVersion'
   tail: None
   text: None

到目前为止我所做的是

    product_version_start = str(content_string).find("<ProductVersion>")-2
    product_version_end = str(content_string).find("</ProductVersion>")+15

在我的 XML 字符串中找到子字符串并从中创建一个新树。

    tree_productVersion = ET.fromstring(content_string[product_version_start:product_version_end])

但现在当我尝试

    tree_productversion.find('Design').text

只返回第一个字段。我想访问所有字段并获取所有信息。

因此我有两个问题,有没有更好的方法来解析嵌套数据?当它们具有相同的名称时,我如何解析所有字段?

您可以简单地遍历 <ProductVersion> 的子项。

pv = tree.find('ProductVersion') 
for child in pv:
    print(child.text)

输出:

A
1
2018
Jon
2
2019
Doe