xlmElementTree复制的项目

时间:2019-01-21 10:27:14

标签: python xml python-3.x pandas dataframe

我有一个要解析的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(部分):

enter image description here

0 个答案:

没有答案