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