Мой пример XML:
<RecordContainer RecordNumber = "1">
<catalog>
<book id="bk101">
<person>
<author>Gambardella, Matthew</author>
<personal_info>
<age>40</age>
</personal_info>
</person>
<title>XML Developer's Guide</title>
<description>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
</description>
<details>
<info>this is the guide to XML</info>
</details>
</book>
</catalog>
</RecordContainer>
<RecordContainer RecordNumber = "2">
<catalog>
<book id="bk102">
<person>
<author>Ralls, Kim</author>
</person>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<description>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
</description>
</book>
</catalog>
</RecordContainer>
Обратите внимание, что выше XML есть вложенные дочерние теги, а некоторые из вложенных тегов отсутствуют в некоторых контейнерах.
Мой ожидаемый вывод - pandas dataframeсо всеми тегами и заполнить ноль в случае пропущенного текста тега.
код для анализа данных:
import xml.etree.ElementTree as ET
import pandas as pd
root = ET.fromstring("<root>"+ sample_data + "</root>")
records = []
containers = root.findall('.//RecordContainer')
for container in containers:
entry = container.attrib
book = container.find('.//catalog/book')
entry.update(book.attrib)
for child in list(book):
entry[child.tag] = child.text
records.append(entry)
df = pd.DataFrame(records)
Приведенный выше код возвращает ноль в случае отсутствия тегов, и он не выровненс именем столбца.