如何在Python的xml.dom.minidom中设置元素的id?

myf*_*web 1 python xml dom minidom

如何?创建了一个文档和一个元素:

import xml.dom.minidom as d
a=d.Document()
b=a.createElement('test')
Run Code Online (Sandbox Code Playgroud)

setIdAttribute不起作用:(

b.setIdAttribute('something')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/xml/dom/minidom.py", line 835, in setIdAttribute
    self.setIdAttributeNode(idAttr)
  File "/usr/lib/python2.6/xml/dom/minidom.py", line 843, in setIdAttributeNode
    raise xml.dom.NotFoundErr()
xml.dom.NotFoundErr
Run Code Online (Sandbox Code Playgroud)

如果我手动设置它,getElementById找不到它.

b.setAttribute('id', 'something')
a.getElementById('something')
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

Jas*_*rff 6

这里有两件事是错的.

  1. Document.getElementById只会找到文档中实际存在的元素.在这里,您已创建b但未实际将其添加到文档中.(它在JavaScript中完全相同.)

  2. 您必须使用标记id为ID属性setIdAttribute.(有没有必要,因为在HTML文档中要做到这一点在JavaScript中,属性进行命名id被自动认为是ID属性,逻辑不够好,但XML不会.不会自动把指定的属性id作为标识,你可以明确地宣布,他们在你的DTD或setIdAttribute单独调用每个ID属性.我不确定DTD是否适用于minidom,这不是一个完整的DOM实现.)

像这样:

import xml.dom.minidom as d
a = d.Document()
b = a.createElement('test')
a.appendChild(b)
b.setAttribute('id', 'x')
b.setIdAttribute('id')
Run Code Online (Sandbox Code Playgroud)

之后,getElementById工作:

>>> a.getElementById('x')
<DOM Element: test at 0xb77712ec>
Run Code Online (Sandbox Code Playgroud)