使用minidom获取多个孩子的价值观

时间:2014-03-24 18:48:46

标签: python dom

xml here可以看到,有多个<item>个节点包含一组子节点,例如<summary><status><key>

我遇到的问题是,在使用minidom时,可以获取firstChild和lastChild的值,但不一定是其中的任何值。

我创建了下面的内容并不起作用,但我认为这与我需要做的非常接近

import xml.dom.minidom

xml = xml.dom.minidom.parse(result) # or xml.dom.minidom.parseString(xml_string)

itemList = xml.getElementsByTagName('item')
for item in itemList [1:]:

    summaryList = item.getElementsByTagName('summary')
    statusList = item.getElementsByTagName('status')
    keyList = item.getElementsByTagName('key')

    lineText = (summaryList[0].nodeValue + " " + statusList[0].nodeValue  + " " + keyList[0].nodeValue)

    p = Paragraph(lineText, style)
    Story.append(p)

2 个答案:

答案 0 :(得分:1)

定义连接所有文本子节点的get_text()函数(参见this answer):

def get_text(element):
    return " ".join(t.nodeValue for t in element[0].childNodes 
                    if t.nodeType == t.TEXT_NODE)


dom = xml.dom.minidom.parseString(data)
itemList = dom.getElementsByTagName('item')
for item in itemList[1:]:
    summaryList = item.getElementsByTagName('summary')
    statusList = item.getElementsByTagName('status')
    keyList = item.getElementsByTagName('key')

    print get_text(summaryList)
    print get_text(statusList)
    print get_text(keyList)
    print "----"

打印:

Unapprove all pull request reviewers after major change
Needs Triage
STASH-4473
----
Allow using left/right arrow to move side by side diff left/right
Needs Triage
STASH-4478
----

希望有所帮助。

答案 1 :(得分:0)

这样的东西
for item in itemList:
    lineText = ' '.join(child.nodeValue for child in item.childNodes)
    p = Paragraph(lineText, style)
    Story.append(p)