如何设置元素';Python中的s id';s xml.dom.minidom?
怎么做?创建文档和元素:如何设置元素';Python中的s id';s xml.dom.minidom?,python,xml,dom,minidom,Python,Xml,Dom,Minidom,怎么做?创建文档和元素: import xml.dom.minidom as d a=d.Document() b=a.createElement('test') setIdAttribute不工作:( 我该怎么办?这里有两件事不对 Document.getElementById将只查找文档中实际存在的元素。在这里,您创建了b,但没有实际将其添加到文档中。(在JavaScript中完全相同。) 必须使用setIdAttribute将id标记为id属性。(在JavaScript中不需要这样做,因
import xml.dom.minidom as d
a=d.Document()
b=a.createElement('test')
setIdAttribute不工作:(
我该怎么办?这里有两件事不对
Document.getElementById
将只查找文档中实际存在的元素。在这里,您创建了b
,但没有实际将其添加到文档中。(在JavaScript中完全相同。)setIdAttribute
将id
标记为id属性。(在JavaScript中不需要这样做,因为在HTML文档中,名为id
的属性在逻辑上被自动视为id属性。但XML不会自动将名为id
的属性视为id;您可以显式声明它们在DTD中,也可以调用setIdAttribute
indiv。)每个ID属性都是独立的。我不确定DTD是否能与MinidDOM一起工作,MinidDOM不是一个完整的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>
>a.getElementById('x')
将id属性的名称添加到DTD应该会有所帮助。例如,如果希望将id
设置为所有
元素的id属性,则可以按如下方式设置DTD:
这是一个工作示例:
>>> 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>'
>从xml.dom.minidom导入解析,解析字符串
>>>data='FOO wordBAR word'
>>>x=解析字符串(数据)
>>>x.getElementById('foo')
>>>x.getElementById('foo').toxml()
u'FOO单词'
它的工作原理与JavaScript中的不同?那么我如何搜索整个文档中的元素(包括子节点)?编辑了答案,以澄清这与JavaScript.document.createElement==minidom.Element和document.appendChild的不同之处。在追加之后,什么都没有发生,同样的问题。
>>> a.getElementById('x')
<DOM Element: test at 0xb77712ec>
>>> 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>'