На вход процесса input подаются данные в виде списка из имени xml файла и его содержимого. На выходе получаем список состоящий из имени файла и словаря, данные которого соответствуют входному xml файлу. Парсинг исходных данных выполняется с помощью входящей в стандартный пакет python библиотеки cElementTree. В связи с тем, что для обработки используется DOM подход, данные XML файла загружаются в память целиком. Нужно быть аккуратным при работе с большими объемами данных.
Пример исходных данных (xml_data):
<?xml version="1.0"?>
<MeasurementData>
<Setup startTime="2011-06-24T02:45:00.000-04:00:00" interval="15">
<Result>
<Object>
<DN><![CDATA[platform1]]></DN>
</Object>
<Target measurementType="CPULoad">
<cpuAverageLoad>65</cpuAverageLoad>
<cpuPeakLoad>87</cpuPeakLoad>
<memFree>344985</memFree>
<memUsed>1456239</memUsed>
<sysAvailability>54</sysAvailability>
<sysUptime>569</sysUptime>
</Target>
</Result>
</Setup>
</MeasurementData>Пример использования процесса xml2dict import pprint from processes.xml2dict1 import xml2dict x2d = xml2dict() pprint.pprint(x2d.run_once(data=(None, xml_data)))На выходе процесса получаем следующий словарь
(None,
{'MeasurementData': {'Setup': {'@interval': '15',
'@startTime': '2011-06-24T02:45:00.000-04:00:00',
'Result': {'Object': {'DN': {'$': 'platform1'}},
'Target': {'@measurementType': 'CPULoad',
'cpuAverageLoad': {'$': '65'},
'cpuPeakLoad': {'$': '87'},
'memFree': {'$': '344985'},
'memUsed': {'$': '1456239'},
'sysAvailability': {'$': '54'},
'sysUptime': {'$': '569'}}}}}})В некоторых xml файлах используются пространства имен (namespace). По умолчанию в процессе xml2dict они удаляются. Для случаев, когда пространства имен необходимы, отключить их удаление можно с помощью параметра remove_xmlns: x2d = xml2dict(remove_xmlns=False)
Процесс xml2dict
P.S. Небольшой юбилей - 100й пост




0 комментариев:
Отправить комментарий