使用minidom获取多个子元素的值

0 投票
2 回答
1804 浏览
提问于 2025-04-17 23:42

从这个xml文件中可以看到,有多个<item>节点,每个节点下面都有一些子节点,比如<summary><status><key>

我遇到的问题是,在使用minidom的时候,可以获取第一个子节点和最后一个子节点的值,但不一定能获取到中间的那些值。

我写了下面的代码,但它并没有成功,我觉得这可能是我需要做的事情的一个接近的尝试。

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

这样怎么样呢

for item in itemList:
    lineText = ' '.join(child.nodeValue for child in item.childNodes)
    p = Paragraph(lineText, style)
    Story.append(p)
2

定义一个叫做 get_text() 的函数,这个函数的作用是把所有文本类型的子节点连接在一起(可以参考这个回答)。

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
----

希望这对你有帮助。

撰写回答