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

如何用Python的ElementTree为XML元素添加默认命名空间及URN

给ElementTree生成的XML添加默认命名空间与urn命名空间声明的修改方案

直接说核心修改点,按步骤来:

  • 第一步:提前定义命名空间URI
    先把你的mam默认命名空间、urn命名空间的实际URI定义好(替换成你需要的真实地址):

    # mam默认命名空间的URI
    MAM_NS = "http://your-mam-namespace-url.com"
    # urn命名空间的URI
    URN_NS = "urn:your-urn-namespace-identifier"
    
  • 第二步:创建根元素时指定默认命名空间
    原来创建根元素可能是root = ET.Element("root"),现在要给标签加上默认命名空间的Clark Notation(大括号包裹URI):

    # 根元素自动带上默认mam命名空间
    root = ET.Element(f"{{{MAM_NS}}}root")
    
  • 第三步:给根元素添加urn命名空间前缀声明
    通过set()方法给根元素添加urn的命名空间属性:

    # 声明urn前缀对应的命名空间
    root.set("xmlns:urn", URN_NS)
    
  • 第四步:所有子元素都使用默认命名空间
    不管是用ET.SubElement还是ET.Element创建子元素,都要带上默认命名空间的前缀,比如:

    # 创建带默认mam命名空间的子元素
    child = ET.SubElement(root, f"{{{MAM_NS}}}item")
    sub_child = ET.Element(f"{{{MAM_NS}}}detail")
    child.append(sub_child)
    
  • 完整示例代码
    下面是修改后的可运行代码,对比就能看到差异:

    import xml.etree.ElementTree as ET
    
    # 1. 定义命名空间
    MAM_NS = "http://example.com/mam"
    URN_NS = "urn:example:urn-ns"
    
    # 2. 创建带默认命名空间的根元素
    root = ET.Element(f"{{{MAM_NS}}}root")
    # 3. 添加urn命名空间声明
    root.set("xmlns:urn", URN_NS)
    
    # 4. 创建所有带默认命名空间的子元素
    item = ET.SubElement(root, f"{{{MAM_NS}}}item")
    item.set(f"{{{URN_NS}}}id", "123")  # 使用urn命名空间的属性
    item.text = "sample content"
    
    # 格式化并输出XML
    ET.indent(root)
    print(ET.tostring(root, encoding="utf-8").decode())
    

    生成的XML结构会是这样:

    <root xmlns="http://example.com/mam" xmlns:urn="urn:example:urn-ns">
      <item urn:id="123">sample content</item>
    </root>
    

注意事项:

  • ElementTree遵循Clark Notation处理命名空间,必须用{namespaceURI}tagname的格式来标记带命名空间的元素/属性。
  • 如果要创建urn前缀的元素(比如<urn:custom-tag>),直接用ET.SubElement(root, f"{{{URN_NS}}}custom-tag")即可,根元素的xmlns:urn声明会自动让输出显示urn:前缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:01:05