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

如何使用lxml为默认命名空间设置前缀

使用lxml为XML默认命名空间添加前缀

原始XML

<root xmlns="test:env:v.1"><elem1>text-1</elem1><elem2>text-2</elem2></root>

期望输出

<n1:root xmlns:n1="test:env:v.1"><n1:elem1>text-1</n1:elem1><n1:elem2>text-2</n1:elem2></n1:root>

实现代码

from lxml import etree

# 原始XML内容
raw_xml = '<root xmlns="test:env:v.1"><elem1>text-1</elem1><elem2>text-2</elem2></root>'

# 解析XML文档
root = etree.fromstring(raw_xml)
# 获取默认命名空间的URI
default_ns_uri = root.nsmap[None]
# 指定要使用的前缀
target_prefix = "n1"

# 遍历所有元素,为标签添加前缀
for element in root.iter():
    # 提取元素的本地名称(去掉命名空间前缀部分)
    local_name = element.tag.split('}')[-1]
    # 重新设置标签为带前缀的格式
    element.tag = f"{target_prefix}:{local_name}"

# 移除根节点上的默认命名空间属性,添加带前缀的命名空间声明
root.attrib.pop('xmlns')
root.attrib[f"xmlns:{target_prefix}"] = default_ns_uri

# 输出处理后的XML
print(etree.tostring(root, encoding='unicode', pretty_print=True))

代码说明

  • 通过root.nsmap[None]直接获取默认命名空间的URI,这是lxml解析后存储默认命名空间的方式
  • 遍历所有元素,拆分标签提取本地名称,重新拼接成前缀:本地名称的格式
  • 修改根节点的属性,替换默认命名空间声明为带前缀的形式
  • 使用etree.tostring输出格式化后的XML内容,确保结构符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:02:33