向python的DOM元素添加名称空间

向python的DOM元素添加名称空间,python,dom,namespaces,xml-namespaces,minidom,Python,Dom,Namespaces,Xml Namespaces,Minidom,我想用python和minidom生成这个xml文件: <xml vesion="1.0" encoding="utf-8?> <package name="Operation" xmlns="http://www.modelIL.eu/types-2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.modelIL.eu/types-2.0 mod

我想用
python
minidom
生成这个xml文件:

<xml vesion="1.0" encoding="utf-8?>
<package name="Operation" xmlns="http://www.modelIL.eu/types-2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.modelIL.eu/types-2.0 modelIL-package-2.0.xsd">
</package>
但我得到的结果是:

<xml vesion="1.0" ?>
<package name="Operation" xmlns="http://www.modelIL.eu/types-2.0" xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.modelIL.eu/types-2.0 modelIL-package-2.0.xsd">
</package>

为什么我只有
xsi
而没有
xmlns:xsi
?我忘了什么吗?

完全公开:我不使用minidom来表示XML,我使用XML,而且我也不经常使用XML,所以我希望我的答案会有用

有人可能会认为,通过设置具有特定名称空间的属性,不需要在最终编写的XML文档中显式地在本地名称之前声明前缀——毕竟,应该可以检测到已使用名称空间,并且完整属性名称中需要前缀,以便将属性识别为与该名称空间关联。不幸的是,我们似乎没有这种奢侈,在设置此类属性时,必须明确指定前缀作为限定名称的一部分

(跳到“心房肌”部分)

这将解决您的问题:

root_xml.setAttributeNS("xmls", "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
正如您所知,该方法接受三个参数:namespaceURI、qualifiedName和value。如果元素没有具有相同名称空间URI和localname的属性,则会添加该属性-我们通过使用函数对qualifiedName进行拆分来获得localname。否则,该方法将尝试更新属性的值

但是,该属性的名称是前缀(冒号标点之前的限定名称部分)和localname
%s:%s“%(前缀,localname)
的组合。如果不存在前缀,则属性的名称与qualifiedName参数相同

如果您不关心属性的namespaceURI,那么您可以仅使用与第一个和最后一个属性相同的方法来实现相同的结果。在这种情况下,该方法将查找具有相同属性名称的属性。如果它找到一个,它将尝试覆盖它的值


我有一个问题:为什么要绑定
root=document.appendChild(root\uXML)
?是为了避免REPL中的返回值吗?我明白。

非常感谢您的回答。我更了解setAttributesNS,它帮助我解决了我的问题!对于您的问题,我绑定了
root=document.appendChild(root\u xml)
,因为我觉得它更容易理解,因为我将根赋予了其他函数以在其中添加子函数。很高兴听到这个消息!感谢您对
root
的回答。
root_xml.setAttributeNS("xmls", "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")