python - 使用 Python/Elementtree 将具有相同标签的多个子元素添加到 en XML 树中

标签 python xml elementtree

我正在从 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/

相关文章:

python - 重复的 StructuredProperty 中的新实体存储为 _BaseValue

python - 解析 XML 文件得到 UnicodeEncodeError (ElementTree)/ValueError (lxml)

python - 用utf-8编码将ElementTree直接写入zip

python - Matplotlib 动画多行和文本

python - Wing IDE 不会在 Google App Engine 的断点处停止

xml - 在终端中编辑 XML 文件

python - 我可以禁用在 ElementTree XMLParser 中解析的实体吗?

python - lxml etree 在之前找到最接近的元素

Python 添加到字典循环

java - 无法读取 Maven 的setting.xml 文件