Простой конструктор XML на Python

Автор: RiGiD

Итак, все что нужно для конструктора, это собственно сам Питон - все средства нативные.
class xmlnode:
    text = ""
    items = list()
    count = 0

    def init(self, title):
        self.text = title
        self.items = []
        self.count = 0

    def append(self, title):
        n = xmlnode() 
        n.init(title)
        self.items.append(n)
        self.count += 1
        return self.items[self.count-1]

    def render(self):
        s = ""
        if self.count > 0:           
            for i in xrange(0, self.count):
                s += self.items[i].render()
            return "<"+self.text+">"+s+"</"+self.text+">"
        elif self.count == 0:
            return self.text
        else:
            return ""


Как видно, это класс, фактически представляющий из себя список с некоторой обвязкой. XML сам по себе можно представить в виде дерева. В данном случае дерево я реализовал в виде рекурсивного списка списков.
Данный класс - нода дерева: либо корневая нода, либо узловая, либо "лист". Она имеет список дочерних нод, который может быть и пустым, если нода - "лист".
Поле text - собственно текст ноды. В случае, если у ноды есть потомки, этот тект становится тегом XML. Если потомков нет - содержимым родительского тега. Поле items - список потомков ноды. Поле count - количество дочерних нод. Это поле, наверно лишнее, т.к. его можно заменить на len(self.items), но мне было просто лень и поэтому вот так Smiling
Далее опишу методы класса. Метод init, как можно догадаться, инициализирует ноду. Метод append реализет добавление дочерней ноды и возвращает указатель на нее. Метод render рекурсивно обходит все дочерние ноды и в итоге возвращает строку с XML-представлением нашего дерева.
Все предельно просто и прозрачно. Вот пример использования класса:

x = xmlnode()
x.init("message")
type = x.append("type")
tval = type.append("DISCOVER")
key = x.append("key")
kval = key.append("ab76b1c5d0ff56")
print x.render()


Вручную создаем и инициализируем корневую ноду и дальше только пользуемся методами класса.
Вот что мы получим на выходе этого примера:

<message><type>DISCOVER</type><key>ab76b1c5d0ff56</key></message>
RSS-материал RSS-материал