以下代码取自获取PA防火墙策略XML文件并转为JSON文件的场景:
通过PA防火墙API获取防火墙策略
防火墙策略xpath为./result/security/rules/entry
以下代码实现将所有entry即策略与策略相关属性转为json对象并存储至文件
python
import xml.etree.ElementTree as ET
import requests
import json
entries_XPath = './result/security/rules/entry'
# xml"对象"转字典
def element_to_dict(element):
result = {}
if element.tag == 'entry':
result['name'] = element.attrib.get('name')
result['uuid'] = element.attrib.get('uuid')
if len(element) == 0:
return element.text
for child in element:
child_data = element_to_dict(child)
if child.tag in result:
if type(result[child.tag]) is list:
result[child.tag].append(child_data)
else:
result[child.tag] = [result[child.tag], child_data]
else:
result[child.tag] = child_data
return result
# xml转json
def transfer_xml_to_json(xml_policy_response):
root = ET.fromstring(xml_policy_response)
entries = root.findall(entries_XPath)
json_policy_response = [element_to_dict(entry) for entry in entries]
return json_policy_response
if __name__ == '__main__':
get_api_key(firewall_ip, username, password)
xml_policy_response = get_security_policy(firewall_ip, api_key)
json_policy_response = transfer_xml_to_json(xml_policy_response.text)
with open('rules.json', 'w') as f:
json.dump(json_policy_response, f)