使用minidom获取多个子元素的值
从这个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
----
希望这对你有帮助。