如何使用 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
我正在从服务器获取 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