는 (파이썬 2.7) 코드에 따르면, 코드 인 _get_elements_by_tagName_helper
기능에 getElementsByName
방법 릴레이 :
def _get_elements_by_tagName_helper(parent, name, rc):
for node in parent.childNodes:
if node.nodeType == Node.ELEMENT_NODE and \
(name == "*" or node.tagName == name):
rc.append(node)
_get_elements_by_tagName_helper(node, name, rc)
return rc
이것이 의미하는 것은 getElementByName
의 순서는 당신이 가지고있는 것과 같은 점이다 childNodes
그러나 이것은 tagName
이 같은 수준에서만 나타나는 경우에만 해당됩니다. 같은 함수 안에 _get_elements_by_tagName_helper
이라는 재귀 호출이 있음을 알 수 있습니다. 즉, 트리에 더 깊게 배치 된 tagName
과 같은 요소는 상위 레벨에있는 요소와 인터리브됩니다.
문서가 인 경우 XML 텍스트 파일 또는 문자열을 의미하는 경우 질문은 DOM의 요소를 만들 때 파서가 순서를 존중하는지 여부로 이동합니다. xml.dom.minidom
에서 parse
함수를 사용하는 경우 pyexpat
라이브러리에 중계하고 그 다음에 expat
C 라이브러리를 사용합니다.
그래서 짧은 대답은 다음과 같습니다
는 당신이 XML DOM에서 계층 구조의 동일한 수준의 태그 이름 만 존재하는 경우, 그 다음 순서가 존중된다. 트리의 다른 노드에서 동일한 tagName을 사용하면 해당 요소가 상위 레벨의 태그로 인터리브됩니다. 존중 순서는 minidom 문서 객체의 요소 순서이며 파서에 따라 다릅니다.
봐이 예 :
>>> import StringIO
>>> from xml.dom.minidom import parseString
>>> s = '''<head>
... <tagName myatt="1"/>
... <tagName myatt="2"/>
... <tagName myatt="3"/>
... <otherTag>
... <otherDeeperTag>
... <tagName myatt="3.1"/>
... <tagName myatt="3.2"/>
... <tagName myatt="3.3"/>
... </otherDeeperTag>
... </otherTag>
... <tagName myatt="4"/>
... <tagName myatt="5"/>
... </head>'''
>>> doc = parseString(s)
>>> for e in doc.getElementsByTagName('tagName'):
... print e.getAttribute('myatt')
...
1
2
3
3.1
3.2
3.3
4
5
이 파서가 XML 문자열의 순서 구조 (대부분의 파서 순서는 그것을 존중하기 쉽기 때문에 그 점) 존중하지만 난 하나를 찾을 수 없습니다 보인다 그것을 확인하는 문서. 내 말은, 파서가 문서의 크기에 따라 목록을 사용하여 요소를 저장하기 위해 해시 테이블로 이동하고 그 결과가 순서를 깨뜨릴 수 있다는 (이상한) 경우 일 수 있습니다. XML 표준은 요소의 순서를 지정하지 않으므로 순서를 고려하지 않는 파서도 불만을 제기합니다.