我无法在python中解析多个xml文件

时间:2019-05-21 11:33:06

标签: xml python-3.x xpath

我正在尝试从xml文件中获取数据,使用1个xml文件,我的代码可以工作,并且我拥有所需的所有数据,但是当我尝试使用diferrents xml文件来获取代码时,它失败了,所有xml都有相同的元素和相同的位置。

我曾尝试在OS中使用glob和list dir,但无法正常工作,当我从终端执行python .py时,我什么也没有返回。

我的仅一个xml文件的工作代码:

import xml.etree.ElementTree as ET
tree = ET.parse('provaDmarcXml2.xml')
root = tree.getroot()
org_name = root[0][0].text


domain = root[1][0].text

LlistaSource_ip = []
LlistaDkim = []
LlistaSpf = []
for source_ip in root.iter('source_ip'):
    sourceIp = source_ip.text
    LlistaSource_ip.append(sourceIp)

for dkim in root.findall("./record/row/policy_evaluated/dkim"):
    Dkim = dkim.text
    LlistaDkim.append(Dkim)


for spf in root.findall("./record/row/policy_evaluated/spf"):
    Spf = spf.text
    LlistaSpf.append(Spf)

for c in range(len(LlistaSource_ip)):
    print (org_name,"\t",end = "")
    print (domain,"\t",end='')
    print (LlistaSource_ip[c],"\t", end="")
    print (LlistaDkim[c],"\t", end="")
    print (LlistaSpf[c],"\t", end="")
    print()

我的代码无法解析同一目录中的多个xml文件。

from os import listdir
import xml.etree.ElementTree as ET


for file in listdir("path to directory"):

    with open(file, "rb"):

        tree = ET.parse(data)

        root = tree.getroot()
        org_name = root[0][0].text
        domain = root[1][0].text

        LlistaSource_ip = []
        LlistaDkim = []
        LlistaSpf = []

        for source_ip in root.iter('source_ip'):
            sourceIp=source_ip.text
            LlistaSource_ip.append(sourceIp)

        for dkim in root.findall("./record/row/policy_evaluated/dkim"):
            Dkim = dkim.text
            LlistaDkim.append(Dkim)

    for spf in root.findall("./record/row/policy_evaluated/spf"):
            Spf = spf.text
        LlistaSpf.append(Spf)

    for c in range(len(LlistaSource_ip)):
        print()

预期结果:

数据数据数据数据数据
数据数据数据数据 数据数据数据数据 数据数据数据数据

所有文件中的

我得到的错误:

回溯(最近通话最近):   第10行中的文件“ provaxmlPrograma2.py”     树= ET.parse(数据) NameError:未定义名称“数据”

或者如果我解决这个问题也不会返回我什么。

1 个答案:

答案 0 :(得分:1)

open()语句中有一个小错误,您必须按如下所示进行定义。

您还可以添加检查 file.endswith(),以确保您只是尝试解析文件夹的xml文件。

from os import listdir
import xml.etree.ElementTree as ET

for file in listdir('path to file'):
    if file.endswith('.xml') or file.endswith('.XML'):
        with open(file, "rb") as data:

            tree = ET.parse(data)
            root = tree.getroot()
...