У меня есть файл xml, который я пытаюсь разобрать. На данный момент я успешно проанализировал его и вернул в DataFrame.
Однако похоже, что у меня не одинаковое количество строк между разными элементами, и это, по-видимому, связано с дублированием определенных строк/элементов, которые имеют несколько значений.
Например, у меня есть строка, в которой элемент rule:
. имеет attrib из {'code' : 'RI0200'}
а затем два child elementsvalue :
. с 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..>
Случай 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 (часть):
Я просто добавляю код. Я надеюсь, что это помогает
Код еще неполный, где ввод и парсинг? Что такое root?
может ли это быть только из-за концепции файла XLM? что означает, что некоторые строки были удалены или, наоборот, другие дублированы?






Можете ли вы показать код, который вы используете для синтаксического анализа? И как вы строите DataFrame?