我正在创建一个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不熟悉,因此感到困惑,请阅读有关名称空间及其全部内容的知识,而不必完全理解它。有人可以教我如何做或分享相关的网络链接吗?那会很有帮助。因为我在Internet上发现了大多数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
答案 0 :(得分:2)
创建命名空间元素和属性的一种好方法是使用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
)。
答案 1 :(得分:0)
http://effbot.org/zone/element-namespaces.htm中的这两个函数说明了如何设置名称空间前缀。看看。
def fixup_element_prefixes(elem, uri_map, memo):
def fixup(name):
try:
return memo[name]
except KeyError:
if name[0] != "{":
return
uri, tag = name[1:].split("}")
if uri in uri_map:
new_name = uri_map[uri] + ":" + tag
memo[name] = new_name
return new_name
# fix element name
name = fixup(elem.tag)
if name:
elem.tag = name
# fix attribute names
for key, value in elem.items():
name = fixup(key)
if name:
elem.set(name, value)
del elem.attrib[key]
package.json