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

时间:2019-03-21 08:58:15

标签: python xml string 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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

输出:

 
A
1
2018
Jon
2
2019
Doe