You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python xml处理:如何让子标签与父标签在同一行输出?

解决Python生成XML时指定标签与子标签同行输出的方法

ElementTree自带的缩进功能(Python3.9+支持ET.indent())默认会给所有层级节点添加换行和缩进,要实现指定节点(如示例中的tag5)内部不换行,核心是清空指定节点及其子节点的text、tail属性里的空白符,跳过对应节点的缩进逻辑即可。

可用代码示例

先修正原代码的错误(tag5标签名多了空格、闭合标签写错为等问题),以下是可直接运行的实现:

import xml.etree.ElementTree as ET

# 构造XML基础结构
root = ET.Element('tag', attrib={
    "atrib":"true", 
    "atrib2":"false", 
    "atrib3":"1", 
    "atrib4":"7"
})
tag1 = ET.SubElement(root, 'tag1', txt='CONTENT')

ET.SubElement(tag1, "tag2", name='Category').text = "1"
ET.SubElement(tag1, "tag3", name='Wallet').text = ' '
ET.SubElement(tag1, "tag4", name='Increase').text = "1"

# 构造tag5及其子节点
tag5 = ET.SubElement(tag1, "tag5", name='Text')
div = ET.SubElement(tag5, "div")
h2 = ET.SubElement(div, "h2")
h2.text = "SomeTxt"

# 第一步:先给全局所有节点加常规缩进
ET.indent(root, space="    ")

# 第二步:核心处理:清空tag5内部所有换行缩进
tag5.text = "" # 清空tag5开头到第一个子节点的空白
for elem in tag5.iter():
    elem.tail = "" # 清空tag5所有子节点闭合后的空白

# 输出XML
xml_str = ET.tostring(root, encoding='unicode')
print(xml_str)

实现原理

ET.indent本质是给每个节点的text(节点开标签到第一个子节点之间的内容)和tail(节点闭标签到下一个节点之间的内容)插入换行和缩进空格,我们只要把tag5内部所有节点的这两个属性的空白清空,就能让tag5和所有子节点在同一行显示,其他节点的缩进不受影响。

如果使用Python3.9以下版本,没有内置ET.indent方法,可以自己实现缩进函数,处理到tag5节点时跳过内部的空白填充逻辑即可。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:36:03