【问题标题】:How to add xmi:version="2.0" attribute to an element如何将 xmi:version="2.0" 属性添加到元素
【发布时间】:2019-10-31 11:20:22
【问题描述】:

我正在创建一个 xml 文件。我完成了根元素的创建,并且能够定义 xml 声明。但我需要创建花药标签,看起来像

<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:TalendProperties="http://www.talend.org/properties">
# i am unable to replicate the above

### some subelements..
</xmi:XMI>

我已完成添加 xmlns URI,但无法获取 xmi:version="2.0"。

我不熟悉 XML,所以很困惑,阅读了命名空间和所有内容,不太了解。有人可以告诉我如何做到这一点或分享相关的网络链接。那将有很大帮助。因为我在互联网上发现的主要是 XML 解析的东西,但很少有关于 XML 生成的资源。

  xmlns_uris_dict = {'xmi':'http://..', 'subprocess':'http://xyz...'}
  root = ET.Element("talendfile:ProcessType")
  ET.register_namespace('xmi', 'version="2.0"') # This part gives a wrong presentation.
  # i am able to add URIs here
  for prefix, uri in xmlns_uris_dict.items():
    root.attrib['xmlns:' + prefix] = uri

【问题讨论】:

    标签: python-3.x xml elementtree


    【解决方案1】:

    创建命名空间元素和属性的一个好方法是使用QName

    import xml.etree.ElementTree as ET
    
    NS = "http://www.omg.org/XMI"
    ET.register_namespace("xmi", NS)
    
    # Create xmi:XMI element
    root = ET.Element(ET.QName(NS, "XMI"))
    
    # Add xmi:version attribute
    root.set(ET.QName(NS, "version"), "2.0")
    
    print(ET.tostring(root).decode())
    

    结果:

    <xmi:XMI xmlns:xmi="http://www.omg.org/XMI" xmi:version="2.0" />
    

    register_namespace() 确保在序列化 XML 文档时使用 xmi 前缀(不是默认的 ns0)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    相关资源
    最近更新 更多