怎么样?创建了一个文档和一个元素:
import xml.dom.minidom as d
a=d.Document()
b=a.createElement('test')
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
如果我手动设置,getElementById找不到它。
b.setAttribute('id', 'something')
a.getElementById('something')
我必须做什么?
答案 0 :(得分:6)
这里有两件事是错误的。
Document.getElementById
只会找到文档中实际存在的元素。在这里,您创建了b
但未实际将其添加到文档中。 (在JavaScript中它完全相同。)
您必须使用id
将setIdAttribute
标记为ID属性。 (没有必要在JavaScript中执行此操作,因为在HTML文档中,名为id
的属性在逻辑上足以自动被视为ID属性。但XML 不会自动处理名为{{1的属性作为ID;您可以显式声明它们在您的DTD中,也可以为每个ID属性单独调用id
。我不确定DTD是否适用于minidom,这不是一个完整的DOM实现。 )
像这样:
setIdAttribute
之后,import xml.dom.minidom as d
a = d.Document()
b = a.createElement('test')
a.appendChild(b)
b.setAttribute('id', 'x')
b.setIdAttribute('id')
有效:
getElementById
答案 1 :(得分:2)
将id属性的名称添加到DTD应该会有所帮助。例如,如果您希望每个人都将id
设置为所有<div>
元素的id属性,则可以按如下方式设置DTD:
<!DOCTYPE div [<!ATTLIST div id ID #IMPLIED>]>
这是一个有效的例子:
>>> from xml.dom.minidom import parse, parseString
>>> data='<!DOCTYPE div [<!ATTLIST div id ID #IMPLIED>]><div><div id="foo">FOO word</div><div id="bar">BAR word</div></div>'
>>> x=parseString(data)
>>> x.getElementById('foo')
<DOM Element: div at 0x1126440>
>>> x.getElementById('foo').toxml()
u'<div id="foo">FOO word</div>'