我有一个要解析的xml文件。目前,我已经成功解析它并将其返回到DataFrame中。
但是,看来我在不同元素之间没有相同数量的行,这似乎是由于某些具有多个值的行/元素的重复。
例如,我有一行元素rule
:
。的attrib
中的{'code' : 'RI0200'}
然后是两个child elements
value
:
。 attrib
和{'test' : 'Id'}
中的{'test': 'Result'}
问题在于这些子元素“值”有时出现在xml代码中两次,有时出现在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..>
情况2:
<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(部分):