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

2024-04-25 06:37:48 发布

您现在位置:Python中文网/ 问答频道 /正文

怎么做?创建了文档和元素:

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')

我该怎么办?


Tags: in文档pylibusrlinexmlsomething
2条回答

将id属性的名称添加到DTD应该会有帮助。例如,如果希望every将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>'

这里有两件事不对。

  1. Document.getElementById将只找到文档中实际存在的元素。在这里,您创建了b,但实际上并没有将其添加到文档中。(在JavaScript中完全相同。)

  2. 必须使用setIdAttributeid标记为ID属性。(在JavaScript中不需要这样做,因为在HTML文档中,名为id的属性在逻辑上被自动视为ID属性。但是XML不会自动将名为id的属性视为ID;您可以显式声明它们在DTD中,也可以为每个ID属性单独调用setIdAttribute。我也不确定DTD是否能与minidom一起工作,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')

之后,getElementById工作:

>>> a.getElementById('x')
<DOM Element: test at 0xb77712ec>

相关问题 更多 >