首页 > 解决方案 > 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(部分):

在此处输入图像描述

标签: pythonxmlpython-3.xpandasdataframe

解决方案


推荐阅读