从多个xml文件中的树中获取元素,但树不在所有文件中

2024-05-01 21:26:10 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码,有件事我想问

import lxml.etree as etree
from xml.etree import ElementTree
import glob

openFiles = 'myxml/*.xml'

list = []

for xmlfiles in glob.glob(openFiles):
    tree = ElementTree.parse(xmlfiles)

    for node in tree.iter('c1'):
        branch_coverage = node.attrib.get('percentage')
        list4.append(branch_coverage)
    else:
        list4.append("none")
...

我想从树上打印一些元素。我有68个xml文件要处理。但并非所有文件都有树(“c1”)。所以在else语句中,我尝试打印“无”。这就是问题所在,当我运行我的程序时。输出总是在打印“百分比”后打印“无”

比如说

错误输出:

none, 100%, none, 100%, none, 100%, none, none, none, 100%, none

预期产出:

none, 100%, 100%, 100%, none, none, 100%


Tags: inimportnonebranchnodetreeforcoverage
2条回答

您可以尝试使用标志:

for xmlfiles in glob.glob(openFiles):
    tree = ElementTree.parse(xmlfiles)
    found = False

    for node in tree.iter('c1'):
        branch_coverage = node.attrib.get('percentage')
        list4.append(branch_coverage)
        found = True
    if not found:
        list4.append("none")
...

出现此问题的原因是,您将else放在for之后,因此在for循环结束后将始终调用else部分,因为for循环在其条件变为False时结束,因此它进入了else部分

你需要像这样的东西-

for node in tree.iter('c1'):
    branch_coverage = node.attrib.get('percentage')
    list4.append(branch_coverage)
if tree.find('.//c1') is None or len(tree.find('.//c1')) == 0:
    list4.append("none")

相关问题 更多 >