2004年08月24日 星期二 17:36
Hollo limodou:
  谢谢!!
回家好好看一看!
今天,研究了一下子 4suite 使用其 4xslt 模块,可以在脚本中进行 XSLT+XML 的解析处理,
哈哈哈!直接使用 XSLT 进行嵌套处理非常的自然,也是XML 标准的处理方式!!!
/******** [2004-08-24]17:34:58 ; limodou wrote:
limodou> python-chinese,您好!
limodou> 我写了一个小的模板类,现在可以实现嵌套处理,但是不支持根据列表数据而实现模板的循环。
limodou> 模板类:
limodou> import re
limodou> import sets
limodou> import copy
limodou> re_node = re.compile('%\((\w+)\)s')
limodou> class Template:
limodou> 	def __init__(self):
limodou> 		pass
	
limodou> 	def load(self, tplname):
limodou> 		mod = __import__(tplname)
limodou> 		components = tplname.split('.')
limodou> 		for comp in components[1:]:
limodou> 			mod = getattr(mod, comp)
limodou> 		self.vars = {}
limodou> 		self.nodes = {}
limodou> 		for v in dir(mod):
limodou> 			if v.startswith('__') and v.endswith('__'):
limodou> 				continue
limodou> 			self.vars[v] = getattr(mod, v)
limodou> 			self.nodes[v] =
limodou> list(sets.Set(self._get_rely_on_node(self.vars[v])))
limodou> 	def _get_rely_on_node(self, s):	#search for
limodou> %(name)s format, make a dict
limodou> 		return re_node.findall(s)
limodou> 	def _get_list(self, path, target):
limodou> 		if not self.vars.has_key(target):
limodou> 			return
limodou> 		if target not in path:
limodou> 			path.append(target)
limodou> 		for i in self.nodes[target]:
limodou> 			self._get_list(path, i)
limodou> 		return
limodou> 	def value(self, target='main', values=None):
limodou> 		path = []
limodou> 		self._get_list(path, target)
limodou> 		path.reverse()
limodou> 		if not values:
limodou> 			vals = {}
limodou> 		else:
limodou> 			vals = copy.deepcopy(values)
limodou> 		for i in path:
limodou> 			vals[i] = self.vars[i] % vals
limodou> 		return vals[target]
limodou> if __name__ == '__main__':
limodou> 	vars = dict(value='aba')
limodou> 	template = Template()
limodou> 	template.load('tmp2')
limodou> 	print template.value('main', vars)
limodou> 测试文件:
limodou> main="""
limodou> v = []
limodou> %(statement)s
limodou> for i in range(10):
limodou> %(printvar)s"""
limodou> statement = "v.append('%(value)s')\n"
limodou> printvar = "    print '\\n'.join(%(var)s)\n"
limodou> var = 'v'
limodou> 有兴趣的可以讨论。
limodou> 现在的问题是对于可循环的模板,比如上面的statement我想根据提供的数据如果为列表或元组时,会自动进行重复。但一个模板可能涉及多个模板变量,如果有多个模板变量为多值该如何处理。按我
limodou> 的想法,这种多值应该组织为一个元组的列表。不过,不太清楚otter会分析出什么数据来。不知道ZoomQuiet对这个有没有兴趣。
limodou> 简单说一下用法:
limodou> 我定义的模板其实是一个模块,不过只是用来定义数据的。
limodou> 	vars = dict(value='aba')  #生成模板用到的变量
limodou> 	template = Template()     #生成一个模板对象
limodou> 	template.load('tmp2')     #装入一个模板
limodou> 	print template.value('main', vars)  
limodou> #得到最终模板的值 当然,模板中还有许多的子模板,都可以得到。
limodou>         致
limodou> 礼!
 				
limodou>         limodou
limodou>         chatme at 263.net
limodou>           2004-08-24
********************************************/
-- 
Free as in Freedom
 Zoom.Quiet                           
#=========================================#
]Time is unimportant, only life important![
#=========================================#
sender is the Bat!2.12.00
2004年08月24日 星期二 17:51
Pythoner,您好! 我要下载很多mp3 但是mp3的下载地址分布在各个不同的网页上。所以我写了一个python程序用来自动读取这些网页 然后获取其中的mp3地址。但是由于这是个论坛,所以只有登陆了才能获得页面,否则他返回一个出错页面。如何让这个论坛认为我已经登陆了呢? 使用cookie吗?或者使用别的方法?请给个解决方法,最好有段示例代码,谢谢! 致 礼! dreamingk(天成) dreamingker at 163.com 2004-08-24
Zeuux © 2025
京ICP备05028076号