我正在从 python 字典中读取数据并尝试在下面的树中添加更多书籍元素。下面只是一个示例,我需要复制一个元素及其子元素但替换内容,在这种情况下我需要复制 book 元素但替换标题和作者。
<store>
<bookstore>
<book>
<title lang="en">IT book</title>
<author>Some IT Guy</author>
</book>
</bookstore>
</store>
我使用这段代码:
root = et.parse('Template.xml').getroot()
bookstore = root.find('bookstore')
book = root.find('bookstore').find('book')
然后我通过字典运行循环并尝试在书店下添加新的书籍元素:
for bk in bks:
book.find('title').text = bk
bookstore.append(book)
结果是 book 元素被添加到书店,但是它们都包含循环最后一次迭代的标题。我知道我在这里做错了什么,但我不明白是什么。我试过:
book[0].append(book) and book[-1].append(book)
但这并没有帮助。
最佳答案
你改变了同一个对象。
您需要使用 copy.deepcopy 实际复制对象
例子:
import xml.etree.ElementTree as et
import copy
root = et.parse('Template.xml').getroot()
bookstore = root.find('bookstore')
book = root.find('bookstore').find('book')
bks = ["book_title_1", "book_title_2", "book_title_3"]
for bk in bks:
new_book = copy.deepcopy(book)
new_book.find('title').text = bk
bookstore.append(new_book)
print et.tostring(root)
关于python - 使用 Python/Elementtree 将具有相同标签的多个子元素添加到 en XML 树中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49259985/