如何用xml.etree.ElementTree将双标签MyBro转换为单标签?
用xml.etree.ElementTree将双标签
转为自闭合标签return (<MyBro>Steve</MyBro>)
return (<MyBro Name="Steve" />)
核心思路是把元素的文本内容转移到属性中,再清空元素文本,让ElementTree自动输出自闭合标签,具体步骤和代码如下:
示例代码
import xml.etree.ElementTree as ET # 可以替换成从文件读取:tree = ET.parse('your_file.xml'); root = tree.getroot() xml_content = '''<Root> <MyBro>Steve</MyBro> <MyBro>John</MyBro> </Root>''' # 解析XML root = ET.fromstring(xml_content) # 批量处理所有MyBro元素 for my_bro in root.findall('MyBro'): # 提取并清理文本(避免多余空格/换行) text_content = my_bro.text.strip() if my_bro.text else '' if text_content: my_bro.set('Name', text_content) # 清空文本,这是生成自闭合标签的关键 my_bro.text = None # 格式化输出(Python 3.9及以上支持ET.indent) ET.indent(root) # 打印转换后的XML print(ET.tostring(root, encoding='unicode')) # 如果要保存到文件,解析修改后执行: # tree.write('output.xml', encoding='utf-8', xml_declaration=True)
关键说明
- 必须清空元素的
text属性:只要元素保留文本内容,ElementTree就会输出双标签结构,哪怕已经添加了属性 - 若原XML里的
MyBro标签有子节点,这种方法不适用(仅针对纯文本内容的双标签场景)
内容的提问来源于stack exchange,提问作者don't blink
相关产品推荐
相关产品推荐

