getElementsByTagName代码优化

时间:2014-03-05 20:23:03

标签: python xml dom

我使用xml.dom.minidom for python来解析一个xml。我必须从几个标签中获取元素并处理它们。场景是这样的:
我有两种标签类型,在我使用getElementsByTagName方法的xml中。我必须得到这些元素的列表并逐个处理它。第一种方法如下:

for intDirNode in dom.getElementsByTagName('IntDir'):
        path = intDirNode.childNodes[0].nodeValue
        print path
for outNode in dom.getElementsByTagName('Outputs'):
    path = outNode.childNodes[0].nodeValue
    print path


现在我想把我从.getElementsByTagName()得到的这两个列表合并成一个循环,这样我的工作就可以在一个简单的循环中完成,如下所示:

for Node in [dom.getElementsByTagName('IntDir'), dom.getElementsByTagName('Outputs')]:
    path = Node.childNodes[0].nodeValue
    print path


但上述代码不起作用。有没有办法做到这一点?

用例就是在更大的图片中我想从xml中获取15个这样的标签,并且为它们编写15个不同的for循环是单调乏味的。我正在寻找简化这一点。

1 个答案:

答案 0 :(得分:2)

getElementsByTagName()返回一个列表,只需将它们组合起来:

nodes = dom.getElementsByTagName('IntDir') + dom.getElementsByTagName('Outputs')
for node in nodes:
    ...

从更大的角度来看,你可能想要像这样做:

node_names = ['IntDir', 'Outputs', ...]
nodes = []
for node_name in node_names:
    nodes += dom.getElementsByTagName(node_name)

for node in nodes:
    ...

希望有所帮助。