парсинг xml и прохождение через узлы в Python objectify - PullRequest
0 голосов
/ 13 марта 2019

Эй, я работаю с 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>

Мы конвертируем ответ в формат xml, используя библиотеку objectify.Как мы можем пройти через узлы в этой ситуации и проверяем, существуют ли эти узлы, мы не хотим получать доступ к имени узла этим методом, например HOST_LIST.HOST.ID, мы сделали что-то вроде

для i вxml_data.RESPONSE [path1] [path2]:

, но при этом мы можем получить доступ только к подузлам, таким как ОС, IP не к узлам в detection_list Мы хотим пройти через все подузлы ихранить результаты в дБ.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]
...