2009-12-28 4 views
1

방법? 문서 및 요소 작성 :.Python의 xml.dom.minidom에서 요소의 id를 설정하는 방법은 무엇입니까?

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

내가해야 할 일

답변

6

두 가지가 잘못되었습니다.

  1. Document.getElementById은 실제로 문서에있는 요소 만 찾습니다. 여기에 b을 만들었지 만 실제로 문서에 추가하지 않았습니다. (자바 스크립트에서 정확히 동일합니다.)

  2. setIdAttribute을 사용하여 ID 속성으로 id을 표시해야합니다. (이 때문에 HTML 문서에 자바 스크립트에서이 작업을 수행 할 필요 없습니다 id가 자동으로 논리적으로 충분히 ID의 속성으로 간주됩니다라는 이름의 속성 그러나 XML은 하지가 자동으로 아이디로 id라는 이름의 속성 하였는가;. 그들은 당신이 명시 적으로 선언 할 수 있음 또는 DTD의 모든 ID 속성에 대해 개별적으로 setIdAttribute 전화 그리고 나는 DTD 일 전체 DOM 구현하지 minidom, 함께 작동합니다 확실하지 오전)

을과 같이 :..

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> 
+1

자바 스크립트에서 똑같은 방식으로 작동하지 않습니까? 그렇다면 하위 노드를 포함하여 전체 문서에서 요소를 검색하려면 어떻게해야합니까? – myfreeweb

+1

이것이 자바 스크립트와 어떻게 다른지 명확히하기 위해 답변을 편집했습니다. –

+0

document.createElement == minidom.Element and document.appendChild. 추가 한 후 아무 문제가 없었습니다. 같은 문제가 발생했습니다. – myfreeweb

2

도움이해야 DTD에 id 속성의 이름을 추가. 당신이 원하는 경우 예를 들어, 모든 다음과 같이 당신이 당신의 DTD를 설정할 수 있습니다, 모든 <div> 요소의 id 속성으로 id을 설정합니다 :

<!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>' 
관련 문제