Cetus Group
Cetus Logo
Информационные системы и программное обеспечение



Файлы проекта

Поддержка

 
Хитрые вещи в Python
Редакция 29.08.2006
А.Г. © Часть 2 - "Получение контента иерархической структуры"

При решении некоторых задач может потребоваться формирование контента для дерева посредством рекурсивного обхода узлов. Примерами таких задач могут быть формирование XML- или HTML-документа. Представленная ниже программа формирует узлы дерева и выполняет рекурсивный обход при получении контента.

Программа состоит из двух частей:
-- класса CsTag, представляющего узел дерева;

class CsTag:
	def __init__(self,parent,text=""):
		self.parent = parent
		self.txt=text
		self.factory = []
		if self.parent:
			self.parent.addItem(self)
	
	def addItem(self,item):
		self.factory.append(item)

	def content(self):
		if len(self.factory) == 0:
			return self.txt
		if len(self.txt):
			st = self.txt + "," + "["
		else:
			st = "["
		for i in self.factory:
			st = st + i.content() + ","	
		return st[:-1] + "]"
-- и главного модуля, формирующего объектную модель документа и запрашивающего его контент.
#!/usr/bin/python
# -*- coding: UTF-8 -*-

from cstag import *

# формируем модель документа
list = CsTag(None)
mark1 = CsTag(list,"Альфа")
sect11 = CsTag(mark1,"Хлеб")
CsTag(sect11,"Миша")
CsTag(sect11,"Петя")
sect12 = CsTag(mark1,"Молоко")
CsTag(sect12,"Маша")
mark2 = CsTag(list,"Гамма")
sect21 = CsTag(mark2,"Хлеб")
CsTag(sect21,"Лена")

# запрашиваем контент
print list.content()

В функции content() классa CsTag вместо дополнения контента символами '[' и ']' могут быть добавлены соответствующие назначению данных теги, в этом случае легко может быть получен документ в формате XML или HTML.

В результате выполнения этой программы имеем следующее:
[Альфа,[Хлеб,[Миша,Петя],Молоко,[Маша]],Гамма,[Хлеб,[Лена]]]


Copyright©2005, Cetus Group : All rights reserved.