Автостопом по Python.

Анализ XML.

В стандартной библиотеке есть анализатор XML (методы parse() и fromstring() класса xml.etree.ElementTree), но this использует библиотеку Expat и создает объект ElementTree, сохраняющий структуру XML. Это значит, что требуется итерировать по нему и опрашивать потомков, дабы получить содержимое. Если нужно лишь получить данные, обратитесь к untangle или xmltodict. Вы можете установить их командой pip:

$ pip install untangle.

$ pip install xmltodict.

• untangle (https://github.com/stchris/untangle). Принимает документ XML и возвращает объект Python, чья структура отражает узлы и атрибуты документа. Например, такой файл XML:

<?xml version="1.0" encoding="UTF-8"?>

<root>

····<child name="child1" />

</root>

Можно загрузить следующим образом:

Import untangle.

Obj = untangle.parse('path/to/file.xml').

Можно получить имя элемента-потомка:

Obj.root.child['name'] # is 'child1'.

• xmltodict (http://github.com/martinblech/xmltodict). Преобразует XML в словарь. Например, такой файл XML:

<mydocument has="an attribute">

··<and>

····<many>elements</many>

····<many>more elements</many>

··</and>

··<plus a="complex">

····element as well.

··</plus>

</mydocument>

Можно загрузить в объект типа OrderedDict (из модуля collections стандартной библиотеки Python):

Import xmltodict.

With open('path/to/file.xml') as fd: doc = xmltodict.parse(fd.read()).

Можно получить доступ к элементам, атрибутам и значениям:

Doc['mydocument']['@has'] # is u'an attribute'.

Doc['mydocument']['and']['many'] # is [u'elements', u'more elements'].

Doc['mydocument']['plus']['@a'] # is u'complex'.

Doc['mydocument']['plus']['#text'] # is u'element as well'.

С помощью xmltodict можно преобразовать словарь обратно в XML, вызвав функцию unparse(). Она имеет потоковый режим, подходящий для обработки файлов, не помещающихся в память, а также поддерживает пространства имен.