2010-01-21 129 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 

这假定每一个元素只包含一个文本节点。