如何设置元素';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>'