Попытка записать содержимое списков в XML - PullRequest
1 голос
/ 25 октября 2019

У меня есть 3 списка одинаковой длины, и я пытаюсь записать их в XML-файл следующим образом:

import xml.etree.ElementTree as ET
import re

title_list = ['title1', 'title2', 'title3']
date_list = ['date1', 'date2', 'date3']
text_list = ['text1', 'text2', 'text3']

book = ET.Element('book')
for e in zip(title_list, date_list, text_list):

    book = ET.Element('book')
    article = ET.SubElement(book, 'article')
    title = ET.SubElement(article, 'title')
    date = ET.SubElement(article, 'date')
    text = ET.SubElement(article, 'text')

    title.text = e[0]
    date.text = e[1]
    text.text = e[2]


tree_out = ET.ElementTree(book)
tree_out.write('test.xml')

мой вывод («довольно напечатанный» в кислороде):

<book>
    <article>
        <title>title3</title>
        <date>date3</date>
        <text>text3</text>
    </article>
</book>

но мне хотелось бы иметь:

<book>
    <article>
        <title>title1</title>
        <date>date1</date>
        <text>text1</text>
    </article>
    <article>
        <title>title2</title>
        <date>date2</date>
        <text>text2</text>
    </article>
    <article>
        <title>title3</title>
        <date>date3</date>
        <text>text3</text>
    </article>
</book>

Как я могу получить весь вывод? Я много читал здесь, но у меня ничего не работает. Пожалуйста, объясните это в простых терминах, так как я довольно новичок в этой библиотеке и XML в целом

1 Ответ

1 голос
/ 25 октября 2019

В вашем цикле for вы переопределяете book, поэтому он перезаписывается с каждой итерацией.

Удалите это, и вы должны получить результаты, которые вы ищете ...

import xml.etree.ElementTree as ET

title_list = ['title1', 'title2', 'title3']
date_list = ['date1', 'date2', 'date3']
text_list = ['text1', 'text2', 'text3']

book = ET.Element('book')
for e in zip(title_list, date_list, text_list):

    # book = ET.Element('book')  # <-- REMOVE THIS LINE
    article = ET.SubElement(book, 'article')
    title = ET.SubElement(article, 'title')
    date = ET.SubElement(article, 'date')
    text = ET.SubElement(article, 'text')

    title.text = e[0]
    date.text = e[1]
    text.text = e[2]

tree_out = ET.ElementTree(book)
tree_out.write('test.xml')
...