Последнее на форуме
Последние статьиСейчас на сайтеСейчас на сайте 0 пользователей и 9 гостей.
|
Простой конструктор 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), но мне было просто лень и поэтому вот так ![]() Далее опишу методы класса. Метод 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>
|
ОпросНужно ли делать основным новый сайт beta.lug-mgn.ru ? Да, нужно 83% Нет, не нужно 17% Сначала надо сделать на нём фичу X (указал в комментариях) 0% Сначала надо сделать для него дизайн (готов взяться) 0% Всего голосов: 6 |