使用Python解析XML,抓住txt会遇到麻烦

时间:2013-12-30 22:03:55

标签: python xml-parsing

我正在尝试解析一个大的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    

1 个答案:

答案 0 :(得分:1)

如果没有看到XML,很难知道,但我有一个猜测。

你有一个循环,每个entry

for securityrule in root.findall('./devices/entry/device-group/entry/post-rulebase/security/rules/entry'):

然后你有一个循环,可以在任何条目中获取每个log-setting,在树中的任何位置:

     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')不是一个字符串的元组,它只是一个字符串。逗号制作元组,而不是括号,你没有任何逗号。所以,它与if logenabled in 'log-forwarding-main'相同。这是在询问字符串logenabled'log-forwarding-main'的子字符串,如'log'还是'g-fo',我怀疑它是否有用。