最小DOM(minidom)不允许在根元素上设置属性。
这是我的代码:
# -*- coding: utf-8 -*-
from xml.dom import minidom
import os
root = minidom.Document()
xml = root.createElement('dbtable')
root.setAttribute("name", 'states')
root.appendChild(xml)
这是错误:
Traceback (most recent call last):
File "C:\Users\sbing\.qgis2\python\plugins\SaveAttributesXML\createXML01.py", line 11, in <module>
root.setAttribute( "id", 'myIdvalue' )
AttributeError: Document instance has no attribute 'setAttribute'
答案 0 :(得分:1)
您正在尝试为文档本身设置属性,而不是根元素。
当您调用Document()
时,您只需创建有关处理文档所需声明的信息。决不会创建根元素:也许使用代码您会更好地理解:< / p>
>>> from xml.dom import minidom
>>> xmldoc = minidom.Document()
>>> xmldoc.toxml()
'<?xml version="1.0" ?>'
>>> xmldoc.childNodes
[]
这段代码告诉我们什么?它只是说当你调用Document()时,你基本上创建了XML prolog而没有别的。另一个证据就是当我们调用childNodes
时,我们得到一个空的NodeList
列表对象。
但是现在您已经创建了XML文档对象,只要您尊重XML DOM规范,就会被读取以添加您想要的任何数据。在这方面,你是对的:我们要做的第一件事是创建根元素,所以让我们这样做:
>>> root_element = xmldoc.createElement('root')
>>> root_element.setAttribute('id', 'id1')
上面两行创建了一个名为root
的DOM元素,并设置了一个名为id
的属性,其值为id1
。但目前这根本不会影响我们的XML文档对象:
>>> xmldoc.toxml()
'<?xml version="1.0" ?>'
要附加root_element,我们就像处理任何其他普通元素一样:
>>> xmldoc.appendChild(root_element)
<DOM Element: root at 0x7f0d654a5bd8>
如您所见,我们现在有一个名为root的根元素,并附加到我们之前创建的XML文档对象中:
>>> xmldoc.toxml()
'<?xml version="1.0" ?><root id="id1"/>'
但是现在你可能会说:是什么让你觉得root_element被认为是根元素而不仅仅是通常的根元素?
嗯:这是我们附加到XML文档的第一个元素,所以默认情况下,minidom非常聪明,可以将它视为根元素,从现在起其他所有内容都将被包装:
>>> xmldoc.documentElement
<DOM Element: root at 0x7f0d654a5bd8>
>>> xmldoc.documentElement.tagName
'root'
希望这是明确的,如果没有,那么请不要犹豫通过评论。