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

如何使用lxml修改XML中的子元素标签名称

使用lxml修改XML标签名称

要把XML里的<CtgyPurp>标签改成<newName>,核心是定位目标元素后修改它的tag属性,同时要注意处理原XML的命名空间(避免新标签脱离原结构约束),具体操作步骤和代码如下:

1. 导入lxml模块

from lxml import etree

2. 解析XML内容

支持解析字符串或本地文件,这里以字符串为例:

xml_content = """<?xml version='1.0' encoding='UTF-8'?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <CstmrCdtTrfInitn>
        <CtgyPurp>
          <Cd>SALA</Cd>
        </CtgyPurp>
  </CstmrCdtTrfInitn>
</Document>
"""
root = etree.fromstring(xml_content)

3. 定位目标标签(处理命名空间)

原XML带有命名空间,必须通过命名空间映射才能准确找到元素:

# 定义命名空间映射,key可自定义,value是原XML的xmlns属性值
ns = {'pain': 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03'}
# 查找目标标签(如果有多个可改用findall)
target_element = root.find('.//pain:CtgyPurp', namespaces=ns)

4. 修改标签名称

必须保留原命名空间,否则新标签会脱离原XML的命名空间规则,两种实现方式:

# 方式1:直接拼接带命名空间的标签名
target_element.tag = f"{{{ns['pain']}}}newName"

# 方式2:用QName类更规范(推荐)
new_qname = etree.QName(ns['pain'], 'newName')
target_element.tag = new_qname

5. 输出修改后的XML

# 格式化输出,保留XML声明和缩进
modified_xml = etree.tostring(
    root,
    encoding='UTF-8',
    pretty_print=True,
    xml_declaration=True
).decode('UTF-8')
print(modified_xml)

执行后,原XML的<CtgyPurp>会被替换为<newName>,内部的<Cd>SALA</Cd>内容保持不变,同时保留原命名空间结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:35:21