Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 169

</breakfast>

<lunch hours="11-3">

<item price="$5.00">hamburger</item>

</lunch>

<dinner hours="3-10">

<item price="8.00">spaghetti</item>

</dinner>

</menu>

222

Глава 8. Данные должны куда-то попадать

Рассмотрим основные характеристики формата XML.

 Теги начинаются с символа <. В этом примере использованы теги menu, breakfast,

lunch, dinner и item.

 Пробелы игнорируются.

 Обычно после начального тега вроде <menu> следует остальной контент, а затем

соответствующий конечный тег вроде </menu>.

 Теги могут быть вложены в другие теги на любой глубине. В этом примере теги

item являются потомками тегов breakfast, lunch и dinner, которые, в свою очередь,

являются потомками тега menu.

 Внутри стартового тега могут встретиться опциональные атрибуты. В этом

примере price является опциональным атрибутом тега item.

 Теги могут содержать значения. В этом примере каждый тег item имеет значение

вроде pancakes у второго элемента тега breakfast.

 Если у тега с именем thing нет значений или потомков, он может быть оформлен

как единственный тег путем включения прямого слеша прямо перед закрыва-

ющей угловой скобкой (<thing/>), вместо того чтобы использовать начальный

и конечный теги <thing> и </thing>.

 Место размещения данных — атрибуты, значения или теги-потомки — являет-

ся в какой-то мере произвольным. Например, мы могли бы написать последний

тег item как <item price="$8.00" food="spaghetti"/>.

XML часто используется в каналах данных и сообщениях и имеет подформаты

вроде RSS и Atom. В некоторых отраслях, например в области бизнеса, имеются

специализированные форматы XML (http://bit.ly/xml-finance).

Сверхгибкость формата XML вдохновила многих людей на создание библиотек

для Python, каждая из которых отличается от других подходом и возможностями.

Самый простой способ проанализировать XML в Python — использовать би-

блиотеку ElementTree. Рассмотрим небольшую программу, которая анализирует

файл menu.xml и выводит на экран некоторые теги и атрибуты:

>>> import xml.etree.ElementTree as et

>>> tree = et.ElementTree(file='menu.xml')

>>> root = tree.getroot()

>>> root.tag

'menu'

>>> for child in root:

... print('tag:', child.tag, 'attributes:', child.attrib)

for grandchild in child:

... print('\ttag:', grandchild.tag, 'attributes:', grandchild.attrib)

...

tag: breakfast attributes: {'hours': '7-11'}

tag: item attributes: {'price': '$6.00'}