如何在Python 3中将SubElement的内容包装在XML标签中?

4 投票
1 回答
1701 浏览
提问于 2025-04-17 14:23

我有一个这样的示例xml文件:

<root>
   She
   <opt>went</opt>
   <opt>didn't go</opt>
   to school.
</root>

我想创建一个名为的子元素,并把所有的内容放进去。也就是说,

<root>
   <sentence>
       She
       <opt>went</opt>
       <opt>didn't go</opt>
       to school.
   </sentence>
</root>

我知道怎么用ElementTree或lxml来创建一个子元素,但我不知道怎么一次性选择从“She”到“shools”的所有内容。

import lxml.etree as ET
ET.SubElement(root, 'sentence')
I'm lost...

1 个回答

3

你可以反过来做这个事情:也就是说,不是添加一个子元素,而是添加一个新的父元素。我的意思是,把root标签改成sentence,然后创建一个新的root元素,把旧的root(现在是sentence)放进新的root里面:

import lxml.etree as ET

content = '''\
<root>
   She
   <opt>went</opt>
   <opt>didn't go</opt>
   to school.
</root>'''

root = ET.fromstring(content)
root.tag = 'sentence'
newroot = ET.Element('root')
newroot.insert(0,root)
print(ET.tostring(newroot))

# <root><sentence>
#    She
#    <opt>went</opt>
#    <opt>didn't go</opt>
#    to school.
# </sentence></root>

撰写回答