Язык программирования Python.

Формирование XML–документа.

Концептуально существуют два пути обработки XML–документа: последовательная обработка и работа с объектной моделью документа.

В первом случае обычно используется SAX (Simple API for XML, простой программный интерфейс для XML). Работа SAX заключается в чтении источников данных (input source) XML–анализаторами (XML–reader) и генерации последовательности событий (events), которые обрабатываются объектами–обработчиками (handlers). SAX дает последовательный доступ к XML–документу.

Во втором случае анализатор XML строит DOM (Document Object Model, объектная модель документа), предлагая для XML–документа конкретную объектную модель. В рамках этой модели узлы DOM–дерева доступны для произвольного доступа,а для переходов между узлами предусмотрен ряд методов.

Можно применить оба этих подхода для формирования приведенного выше XML–документа.

С помощью SAX документ сформируется так:

Import sys.

From xml.sax.saxutils import XMLGenerator.

G = XMLGenerator(sys.stdout).

G.startDocument().

G.startElement("expression", {}).

G.startElement("operation", {"type": "+"}).

G.startElement("operand", {}).

G.characters("2").

G.endElement("operand").

G.startElement("operand", {}).

G.startElement("operation", {"type": "*"}).

G.startElement("operand", {}).

G.characters("3").

G.endElement("operand").

G.startElement("operand", {}).

G.characters("4").

G.endElement("operand").

G.endElement("operation").

G.endElement("operand").

G.endElement("operation").

G.endElement("expression").

G.endDocument().

Построение дерева объектной модели документа может выглядеть, например, так:

From xml.dom import minidom.

Dom = minidom.Document().

E1 = dom.createElement("expression").

Dom.appendChild(e1).

P1 = dom.createElement("operation").

P1.setAttribute('type', '+').

X1 = dom.createElement("operand").

X1.appendChild(dom.createTextNode("2")).

P1.appendChild(x1).

E1.appendChild(p1).

P2 = dom.createElement("operation").

P2.setAttribute('type', '*').

X2 = dom.createElement("operand").

X2.appendChild(dom.createTextNode("3")).

P2.appendChild(x2).

X3 = dom.createElement("operand").

X3.appendChild(dom.createTextNode("4")).

P2.appendChild(x3).

X4 = dom.createElement("operand").

X4.appendChild(p2).

P1.appendChild(x4).

Print dom.toprettyxml().

Легко заметить, что при использовании SAX команды на генерацию тегов и других частей выдаются последовательно, а вот построение одной и той же DOM можно выполнять различными последовательностями команд формирования узла и его соединения с другими узлами.

Конечно, указанные примеры носят довольно теоретический характер, так как на практике строить XML–документы таким образом обычно не приходится.