2010-01-21 6 views
1

저는 Python에서 xml.dom.mindom을 사용 중이며 아래 XML 트리에서 책 노드를 검색했습니다. 모든 자식 노드의 목록을 얻고 싶습니다. 이 경우에는 하나만있을 것이라고 생각합니다. Python XML 구문 분석

<Book> 
    <Title>Why is this so hard</Title> 
</Book 

내가 전화 할 때 :

nodeList = bookNode.childNodes 
print "nodeList has " + str(nodeList.length) + " elements" 
for node in nodeList: 
    print "Found a " + node.nodeName + " node" 

나는 다음과 같은 출력을 얻을 :이 무작위로하는 #text 노드가 무엇

nodeList has 3 elements 
Found a #text node 
Found a Book node 
Found a #text node 

를? 합법적 인 노드 각각에 대해 tagName 및 value를 얻으려면 어떻게해야합니까? Book 아래의 각 노드에 대해 key-> value 쌍 목록을 가져 오려고합니다. 나는 모든 tagNames를 미리 알지 못하기 때문에 getElementsByName을 사용하고 싶지 않다.

Book -> "Why is this so hard" 

고맙다 - 조나단

답변

3

첫 번째 텍스트 노드는 < 예약 > 및 < 제목 > 사이의 공백입니다. 두 번째는 </제목 > 및 </도서 사이의 공백입니다 >

+0

첫 번째 텍스트 노드는 < 도서> 및 < 제목> 사이의 공백입니다. 두 번째는 </Title>과 </Book> 사이의 공백입니다. – Sukasa

0

이 무작위로하는 #text 노드는 무엇입니까?

태그는 태그 사이에있는 공백을 나타내는 텍스트 노드입니다. XML은이를 기억해야한다. 그렇지 않으면 문서를 재 직렬화 할 때 읽을 수없는 한 줄로 함께 실행된다.

각각의 합법적 인 노드에 대해 tagName과 value를 얻는 방법은 무엇입니까?

요소가 아닌 노드는 무시하고 하위 노드는 루프합니다.

Book 아래의 각 노드에 대해 key-> value 쌍 목록을 가져 오려고합니다.

book= {} 
for child in bookNode.childNodes: 
    if child.nodeType==child.ELEMENT_NODE: 
     book[child.tagName]= '' if child.firstChild is None else child.firstChild.data 

이 모든 요소는 하나의 텍스트 노드가 포함되어 있다고 가정합니다.