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

如何用Python为XML文件中现有文本添加多个XML元素

解决XML中纯文本节点转为指定元素的问题

可以用Python标准库xml.etree.ElementTree处理这类场景,核心是识别XML元素的tail属性——这个属性存储了当前元素之后、下一个元素或父元素结束前的文本内容,正是你需要转为元素的目标值。

完整代码示例

import xml.etree.ElementTree as ET

# 原XML内容
xml_str = '''<A>
<B id="254">
    <C>Lore</C>
    <D>9</D> 
    12.34
</B>
<B id="255">
    <C>Ipsum</C>
    <D>125</D> 
    23.45
</B>
<E/>
<F id="256">
    <G>Lore Ipsum
        <E>79</E> 
        34.56
    </G>
</F>
</A>'''

# 解析XML
root = ET.fromstring(xml_str)

# 处理所有<B>元素中的尾文本,转为<Z>元素
for b in root.findall('.//B'):
    last_child = b[-1] if len(b) > 0 else None
    if last_child:
        tail_text = last_child.tail.strip() if last_child.tail else ''
        if tail_text:
            z_elem = ET.Element('Z')
            z_elem.text = tail_text
            b.append(z_elem)
            # 保留格式空白,避免输出混乱
            last_child.tail = '\n    '

# 处理<G>元素中<E>的尾文本,转为<Y>元素
g_elem = root.find('.//G')
if g_elem:
    e_in_g = g_elem.find('E')
    if e_in_g:
        tail_text = e_in_g.tail.strip() if e_in_g.tail else ''
        if tail_text:
            y_elem = ET.Element('Y')
            y_elem.text = tail_text
            g_elem.append(y_elem)
            e_in_g.tail = '\n        '

# 格式化并输出结果(Python 3.9+支持ET.indent)
ET.indent(root, space='    ')
print(ET.tostring(root, encoding='unicode'))

关键逻辑说明

  1. 识别目标文本:XML中未被包裹的文本实际存储在对应前置元素的tail属性中,比如12.34是<D>元素的tail,34.56是<E>元素的tail
  2. 清理与判断:对tail文本执行strip()去除首尾空白,确保只处理有效内容
  3. 创建并添加元素:根据需求创建<Z>或<Y>元素,将清理后的文本赋值给元素的text属性,再添加到父元素中
  4. 格式维护:清空原tail文本时保留适当空白,保证输出XML的可读性

运行代码后,输出结果将与你提供的目标XML完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:17:52