0

我正在尝试在我生成的 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”,所有命名空间都会消失。

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

4

1 回答 1

1

我不知道如何处理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

于 2020-07-09T06:56:58.930 回答