嘿,我从事对象化工作已经很长时间了。
<HOST_LIST>
<HOST>
<ID>93998121</ID>
<IP>1.1.1.1</IP>
<TRACKING_METHOD>IP</TRACKING_METHOD>
<OS><![CDATA[Windows]></OS>
<LAST_SCAN_DATETIME>2018-03-31T08:22:34Z</LAST_SCAN_DATETIME>
<LAST_VM_SCANNED_DATE>2018-02-13T08:22:14Z</LAST_VM_SCANNED_DATE>
<LAST_VM_SCANNED_DURATION>41</LAST_VM_SCANNED_DURATION>
<DETECTION_LIST>
<DETECTION>
<QID>15</QID>
<TYPE>Info</TYPE>
<SEVERITY>1</SEVERITY>
<RESULTS><![CDATA[IP address Host name
1.1.1.1 No registered hostname]]></RESULTS>
<LAST_FOUND_DATETIME>2019-03-13T08:22:14Z</LAST_FOUND_DATETIME>
<TIMES_FOUND>184</TIMES_FOUND>
<IS_DISABLED>0</IS_DISABLED>
<LAST_PROCESSED_DATETIME>2019-03-13T08:22:34Z</LAST_PROCESSED_DATETIME>
</DETECTION>
<DETECTION>
<QID>11</QID>
<TYPE>Info</TYPE>
<SEVERITY>1</SEVERITY>
<RESULTS><![CDATA[test]</RESULTS>
我们使用objectify库将响应转换为xml格式。
在这种情况下,我们如何循环遍历节点,并检查该节点是否存在,所以我们不想像HOST_LIST.HOST.ID
这样的方法访问节点名,我们做了类似的事情
对于xml_data.RESPONSE [path1] [path2]中的我:
但是通过这种方式,我们只能访问OS,IP之类的子节点,而不能访问detection_list
下的节点
我们要遍历所有子节点并将结果存储在db中。
path1 =HOST_LIST
和path2=HOST
和
fetch =["IP","OS","ID","LAST_SCAN_DATETIME","LAST_VM_SCANNED_DATE"]
我们如何使用此方法访问QID ,TYPE
。
for res in xml_data.RESPONSE[path1][path2]:
dicts = {}
if fetch has
for field in fetch[0]:
dicts[field] = res[field]