首页 > 解决方案 > 无法从 QName 中删除不必要的元素

问题描述

我正在尝试在我生成的 xml 中添加命名空间,所以我尝试了这个并想出了下面的代码:

from xml.etree import ElementTree as ET

NS1 = "http://www.w3.org/" 


ET.register_namespace("xsi", NS1) 

qname1 = ET.QName(NS1, "D")    # Element QName 

root = ET.Element("Database", {qname1:""},xmlns="http://www.staubli.com/") 

print(ET.tostring(root).decode())

这段代码给了我

<Database xmlns:xsi="http://www.w3.org/" xsi:D="" xmlns="http://www.staubli.com/" />

而且我要

<Database xmlns:xsi="http://www.w3.org/" xmlns="http://www.staubli.com/">

所以我想摆脱xsi:D="". 但是,如果我从 QName 行中删除“D”,所有命名空间都会消失。

你知道我怎么能做到这一点吗?谢谢你。

标签: pythonxmlelementtreeqnames

解决方案


我不知道如何处理etree。这是另一个解决方案。

from simplified_scrapy import SimplifiedDoc
xml = '''<Database />'''
doc = SimplifiedDoc(xml)
root = doc.Database
root.setAttrs({"xmlns:xsi":"http://www.w3.org/","xmlns":"http://www.staubli.com/"})
print (doc.html) # <Database xmlns:xsi="http://www.w3.org/" xmlns="http://www.staubli.com/" />
# Or
xml = '''<Database></Database>'''
doc = SimplifiedDoc(xml)
root = doc.Database
root.setAttrs({"xmlns:xsi":"http://www.w3.org/","xmlns":"http://www.staubli.com/"})
print (doc.html) # <Database xmlns:xsi="http://www.w3.org/" xmlns="http://www.staubli.com/"></Database>

这里有更多例子:https ://github.com/yiyedata/simplified-scrapy-demo/blob/master/doc_examples/edit_element.py


推荐阅读