Skip to main content
 首页 » 编程设计

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

2025年05月04日22dyllove98

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