python - xlmElementTree 重复项
问题描述
我有一个要解析的 xml 文件。目前,我成功解析它并在 DataFrame 中返回它。
但是,似乎我在不同元素之间没有相同数量的行,这似乎是由于某些具有多个值的行/元素的重复。
例如,我有一行 which element rule
: 。有attrib
一个{'code' : 'RI0200'}
然后是两个child elements
value
:。和attrib
_ {'test' : 'Id'}
_{'test': 'Result'}
问题是这些子元素“值”有时会出现在 xml 代码中,有时是 2 次,有时是 3、4 或 5 次……因此最后的行数存在差异。
我的问题是:如何将每个附加value
到单个上rule
,从而复制rule
尽可能多的行value
?
循环时root.iter()
,我可以看到有某种附着点:
< Element 'xxxxxxx' at 0x0000000xxxx>
我的第一次尝试是访问最后一部分,但我不知道如何。
例如
情况1:
<Element 'Rule' at 0x00000xxx..>
<Element 'Value' at 0x00000xxx..>
<Element 'Value' at 0x00000xxx3..>
案例二:
<Element 'Rule' at 0x00000xxx..>
<Element 'Value' at 0x00000xxx..>
<Element 'Value' at 0x00000xxx..>
<Element 'Value' at 0x00000xxx..>
案例3:
<Element 'Rule' at 0x00000xxx..>
<Element 'Value' at 0x00000xxx..>
<Element 'Value' at 0x00000xxx..>
案例4:
<Element 'Rule' at 0x00000xxx..>
<Element 'Value' at 0x00000xxx..>
<Element 'Value' at 0x00000xxx..>
<Element 'Value' at 0x00000xxx..>
<Element 'Value' at 0x00000xxx..>
代码 :
import xml.etree.ElementTree as ET
tree = ET.parse(r'C:\Users\xxx\Desktop\CRC\test2.XML')
root = tree.getroot()
lst_rule2 = []
lst_msg = []
lst_value_name = []
lst_value_result = []
for rule in root.iter('rule'):
lst_rule2.append(rule.attrib)
for msg in root.iter('message'):
lst_msg.append(msg.attrib)
for value in root.iter('value'):
lst_value_name.append(value.attrib)
lst_value_result.append(value.text)
import pandas as pd
df1 = pd.DataFrame(lst_rule2)
df2 = pd.DataFrame(lst_msg)
df3 = pd.DataFrame(lst_value_name)
df4 = pd.DataFrame(lst_value_result)
df = pd.concat([df1,df2,df3,df4], axis=1)
print(len(lst_rule2), len(lst_msg), len(lst_value_name), len(lst_value_result))
返回1413 1413 3630 3630
XML(部分):
解决方案
推荐阅读
- amazon-web-services - 单次使用/访问预签名 url 以查看 S3 对象
- python - 仅将熊猫数据框中的新行附加到数据库中的表的有效方法
- php - 循环遍历具有特殊条件的数组
- asp.net-mvc - 为什么 CSV Helper 使用 ASP.Net MVC 只读取第一行?
- c# - 如何在没有控制台/本机应用程序的交互式登录屏幕的情况下为 Graph API 生成 Azure Active Directory (AAD) 身份验证令牌?
- pascalscript - HelpNDoc Pascal 脚本是否支持结构?
- laravel - Laravel Dingo API 在 Apache VHosts 上返回 404 错误
- api - 将 CURL 转换为邮递员
- java - 使用 Spring Boot 从 Oracle 数据库获取实体不起作用
- kubernetes - 发布应用程序