解析xml并遍历对象化Python中的子节点

时间:2019-03-13 19:35:51

标签: python xml xml-parsing lxml.objectify

嘿,我从事对象化工作已经很长时间了。

<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_LISTpath2=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]

0 个答案:

没有答案