2010-01-21 108 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" 

我得到以下輸出:

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

什麼是這些隨機#text節點?我如何獲得每個合法節點的tagName和value?我想獲取Book下每個節點的鍵 - >值對的列表。我不想使用getElementsByName,因爲我不會提前知道所有的tagNames。

Book -> "Why is this so hard" 

Thanks- 喬納森

回答

3

第一個文本節點之間<書>和<標題>空白。第二個是之間< /標題>和< /圖書的空白>

+0

第一個文本節點是< Book>和< Title>之間的空格。第二個是</Title>和</Book之間的空格。 – Sukasa 2010-01-21 23:55:16

0

什麼是這些隨機#text節點?

幾乎是隨機的,它們是文本節點,表示您在標籤之間放置的空白。 XML必須記住這一點,否則當它被重新串行化時,文檔將全部在一個不可讀的行中一起運行。

如何獲取每個合法節點的tagName和值?

在子節點上循環,忽略那些不是元素的子節點。

我想獲取Book下每個節點的鍵 - >值對的列表。

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

這假定每一個元素只包含一個文本節點。