Преобразование XML в Pandas Dataframe

XML-файл:

<start>
    <Hit>
         <hits path="xxxxx" id="xx" title="xxx">
         <hits path="aaaaa" id="aa" title="aaa">
    </Hit>
    <Hit>
         <hits path="bbbbb" id="bb" title="bbb">
    </Hit>
    <Hit>
         <hits path="qqqqq" id="qq" title="qqq">
         <hits path="wwwww" id="ww" title="www">
         <hits path="ttttt" id="tt" title="ttt">
    </Hit>
</start>

Код Python:

import xml.etree.cElementTree as et
tree = et.parse(xml_data)
root = tree.getroot()

for child in root:
    record = child.attrib.values()
    all_records.append(record)
    pd1 = pd.DataFrame(all_records,columns=subchild.attrib.keys())

У меня есть неструктурированный файл XML. Элемент попадания может иметь случайное количество элементов вспомогательных попаданий.
Я хочу сделать список всех первых подэлементов попаданий из всех элементов попадания.

Ответ:
Содержание кадра данных:

   path    id    title
0  xxxxx   xx    xxx
1  bbbbb   bb    bbb
2  qqqqq   qq    qqq

Вот и все. Все остальные пункты должны игнорироваться.

record = child.attrib.values()

Эта строка кода принимает все значения из элемента попаданий. т.е. всего 6 значений. Я хочу только 3 значения, так как доступен только 3 метки.

Как это сделать?

1 ответ

Я думаю, что нужно изменить:

record = child.attrib.values()

чтобы:

record = child[0].attrib.values()

для выбора только первые значения.

Перечислите комплексное решение:

all_records = [child[0].attrib.values() for child in root ]

Если возможно, какой-нибудь пустой Hit элементы:

all_records = []
for child in root:
    if len(child) > 0:
        record = child[0].attrib.values()
        all_records.append(record)

Решение для понимания списка:

all_records = [child[0].attrib.values() for child in root if len(child) > 0]
Другие вопросы по тегам