用Python解析XML,抓取txt有问题

用Python解析XML,抓取txt有问题,python,xml-parsing,Python,Xml Parsing,我正试图解析一个大的xml文件以用于审计目的。因为这与我所在组织的防火墙有关,所以我无法发布实际的XML。第一个for语句查找我的所有设备组。第二个for语句获取该设备组中的所有安全规则。第三个for语句是查看是否设置了日志转发 这个特定的示例只是在一个循环中运行。我尝试过其他故障排除,在那里我可以打印设备组名称、安全规则和日志转发文本。我似乎无法在if-else语句中正确使用它,而且它似乎为每个安全规则打印了多行 对不起,伙计们/姑娘们,简直是一个巨蟒迷。我相信这对你们中的一些人来说并不难 i

我正试图解析一个大的xml文件以用于审计目的。因为这与我所在组织的防火墙有关,所以我无法发布实际的XML。第一个for语句查找我的所有设备组。第二个for语句获取该设备组中的所有安全规则。第三个for语句是查看是否设置了日志转发

这个特定的示例只是在一个循环中运行。我尝试过其他故障排除,在那里我可以打印设备组名称、安全规则和日志转发文本。我似乎无法在if-else语句中正确使用它,而且它似乎为每个安全规则打印了多行

对不起,伙计们/姑娘们,简直是一个巨蟒迷。我相信这对你们中的一些人来说并不难

import xml.etree.ElementTree as ET

tree = ET.parse('/testing/bigtest.xml')
root = tree.getroot()

for devicegroupname in root.findall('./devices/entry/device-group/entry'):
dgname = devicegroupname.get('name')
    for securityrule in root.findall('./devices/entry/device-group/entry/post-rulebase/security/rules/entry'):
    rulename = securityrule.get('name')
         for logsetting in root.findall('./devices/entry/devicegroup/entry/post-rulebase/security/rules/entry/log-setting'):
         logenabled = logsetting.text
            if logenabled in ('log-forwarding-main'):
               break
            else:
               print dgname + " " + rulename + " " + logenabled
               break    

不看XML很难知道,但我有一个猜测

您有一个获取每个
条目的循环:

for securityrule in root.findall('./devices/entry/device-group/entry/post-rulebase/security/rules/entry'):
然后,您有一个循环,用于获取树中任意条目中的每个
日志设置:

     for logsetting in root.findall('./devices/entry/devicegroup/entry/post-rulebase/security/rules/entry/log-setting'):
因此,您将对条目0检查一次所有200个条目的日志设置,然后对条目1再次检查所有200个条目的日志设置,依此类推

我很确定你只是想检查一下当前条目的日志设置。像这样:

     for logsetting in security rule.findall('./log-setting'):
在所有其他层面上都是一样的


作为旁注,我不确定这意味着什么:

if logenabled in ('log-forwarding-main'):

…但它可能没有这样做
('log-forwarding-main')
不是一个字符串的元组,它只是一个字符串。逗号构成元组,而不是括号,并且没有任何逗号。因此,如果在“log forwarding main”(日志转发主目录)中启用了日志,则与
相同。它询问字符串
logenabled
是否是
'log-forwarding-main'
的子字符串,如
'log'
'g-fo'
,我怀疑这是否有用。

在这个问题中是否可以剪切和粘贴一些XML(如果需要,可以更改文本以隐藏名称等),否则很难解决