如何使用Python在多次迭代中解析和匹配多个XML文件?
我有两个XML文件。一个文件包含防火墙规则,这些规则是使用对象而不是IP地址、服务等定义的。第二个文件包含这些对象的定义、它们的IP地址、服务类型等 使用ElementTree和以下代码,我可以很容易地遍历每个XML文件并将对象与服务定义相匹配:如何使用Python在多次迭代中解析和匹配多个XML文件?,python,xml,Python,Xml,我有两个XML文件。一个文件包含防火墙规则,这些规则是使用对象而不是IP地址、服务等定义的。第二个文件包含这些对象的定义、它们的IP地址、服务类型等 使用ElementTree和以下代码,我可以很容易地遍历每个XML文件并将对象与服务定义相匹配: import xml.etree.ElementTree as ET fwPolicy = ET.parse('policy.xml') services = ET.parse('services.xml') rules = fwPolicy.fin
import xml.etree.ElementTree as ET
fwPolicy = ET.parse('policy.xml')
services = ET.parse('services.xml')
rules = fwPolicy.findall('./rule')
service = services.findall('./service')
for rule in rules:
ruleServices = rule.findall('./services/members/reference/Name')
for ruleService in ruleServices:
for objService in service:
objServiceName = objService.find('./Name').text
if ruleService.text == objServiceName:
print('Service search Found :', objServiceName)
XML File 1 policy.xml:
<Class_Name>rule_services</Class_Name>
<members>
<reference>
<Name>icmp-requests</Name>
<Table>services</Table>
</reference>
<reference>
<Name>gre</Name>
<Table>services</Table>
</reference>
</members>
</Class_Name>
XML File 2 services.xml:
<service>
<Name>icmp-requests</Name>
<Class_Name>service_group</Class_Name>
<members>
<reference>
<Name>echo-request</Name>
<Table>services</Table>
</reference>
<reference>
<Name>info-req</Name>
<Table>services</Table>
</reference>
<reference>
<Name>timestamp</Name>
<Table>services</Table>
</reference>
<reference>
<Name>mask-request</Name>
<Table>services</Table>
</reference>
</members>
</service>
<service>
<Name>echo-request</Name>
<Class_Name>icmp_service</Class_Name>
<icmp_type>8</icmp_type>
</service>
将xml.etree.ElementTree作为ET导入
fwPolicy=ET.parse('policy.xml')
services=ET.parse('services.xml')
rules=fwPolicy.findall(“./rule”)
service=services.findall(“./service”)
对于规则中的规则:
ruleServices=rule.findall(“./services/members/reference/Name”)
对于ruleServices中的ruleService:
对于正在使用的objService:
objServiceName=objService.find('./Name').text
如果ruleService.text==objServiceName:
打印('找到服务搜索:',objServiceName)
XML文件1 policy.XML:
规则服务
icmp请求
服务
gre
服务
XML文件2 services.XML:
icmp请求
服务组
回显请求
服务
信息请求
服务
时间戳
服务
屏蔽请求
服务
回显请求
icmp_服务
8.
我遇到的问题是policy.xml中使用的一些对象是“服务组”,其中包含我需要访问的实际服务。在示例中,XML policy.XML包含“icmp请求”作为服务对象,它是services.XML中的“服务组”。因此,当我进行比赛时,我是在与团队对抗,而我真的需要与团队中的所有服务进行对抗
我考虑只添加一个代码来检查服务对象是否是服务组,然后在其中循环并提取所有服务。我的问题是服务组可能包含其他服务组。筑巢的距离确实没有限制
最后,我需要做的是从policy.xml中提取所有成员,并将其与services.xml的所有单个成员进行匹配 我可以通过构建以下函数来解决我的问题:
def resolve_group_members(group_name):
# Loop through the list of members
for member in groups[group_name]:
# If the member is in the groups dict keys
if member in groups.keys():
# recursively loop through the function again passing the member name
resolve_group_members(member)
else:
# if the member is not a group now we can do something with it
print('\t\tGroup Members: ' + member)
通过这种方式,我可以将所有服务分配给一个字典,然后解析每个组成员