- 论坛徽章:
- 0
|
废话不多说,直接看代码。随便写了一下,还不完善。想加入XPATH对生成的字串进行相关操作还没来得及。
以博大家一笑了哈。。。。- #-*- coding:utf-8 -*-
- """
- Created on 2011-6-15
- @author: wangkaiping
- @description: 动态MUDL、WAP标签、XML生成器
- 本工具主要用于快速生成动态MUDL,WAP标签,XML格式的字符串。可以直接使用它生成动态MUDL控件!
-
- 说明:
- 1:每一个生成的控件只需要传入任意的意数即可,参数可以是字符串也可以控件本身,
- 如果是控件 本身则将控件当作他的子节点进行处理 !
- 2:生成每一个控件的时候必须有一个 'tagName'的参数以判断具体生成什么标签,此参数必须有
- 3:setText()用于生成控件的文本区域比如: <aa>这里就是setText()的值</aa>
- 4: put(key,value)方法用于动态的设置控件的参数 也可以把字节点通过此方法设置上去。
- 程序会自动判断传入的属性还是下级节点
- 5: class属性由于在python当中是关键字,请用clazz进行代替
- 6: 由于对特殊字符或边界问题异常等问题没作处理,也主要为了便于调试和完善。大家使用时请注意一下
- 7:还有很多不完善的地方使用的时候请多反馈一下。性能也未作测试
-
- 此工具可以完全脱离动态MUDL一些属性的限制,
- 可以直接用来生成WAP再配合FREEMARK模板来完成动态WAP等效果避免写很多的静态页面。
- 主要解决WAP返回值时一些多选框,下拉列表等不能动态填值的问题!
-
- EG:
- table = createControl(tagName='table',cellspacing='0')
- tr = createControl(tagName='tr')
- table.put('tr',tr)
- table.put('tr1',tr)
- td = createControl(tagName='td')
- input = createControl(tagName='input',type="hidden",value="0101",name="fromnaviid" )
- input1 = createControl(tagName='input',type="text",value="0102")
- td.put('input',input)
- td.put('input1',input1)
- td.setText(u'我的名字:')
- tr.put('td',td)
- tr.put('td1',td)
- tr.put('td2',td)
- tr.put('td3',td)
- tr.put('td4',td)
-
- g = table.toWap('') #注意,toWap()必须传一个字符串,这里主要是剃归的返回值!
- 如果是要生成标准的XML请传入<?xml version="1.0" encoding="UTF-8"?>
- 如果只是生成标签控件,则只需要传入一个空串就行了。
-
- 生成的字符串如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <table cellspacing="0">
- <tr>
- <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
- <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
- <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
- <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
- <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
- </tr>
- <tr>
- <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
- <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
- <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
- <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
- <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
- </tr>
- </table>
- """
- class WapControl():
- __text = ''
- def toWap(self,result):
- allAtt = dir(self)
- tagName = getattr(self, 'tagName')
- child = []
- result = '<'+tagName
- for key in allAtt:
- value = getattr(self,key)
- if key != 'tagName' and key != '__doc__' and key != '_WapControl__text' and key != '__module__' and not callable(value):
- at = getattr(self, key)
- flag = isinstance(self,type(at))
- if not flag:
- if key == 'clazz':
- result += ' class="'+str(value)+'" '
- else:
- result += ' '+key + '="'+str(value)+'" '
- else:
- child.append(at)
- result += '>' + self.__text
- if len(child) > 0 :
- for ch in child:
- self = ch
- dd = self.toWap(result)
- result += dd
- result += '</'+tagName+'>'
- return result
-
- def put(self,key,value):
- setattr(self,key,value)
-
- def setText(self,text):
- self.__text = text
-
- def __generateMap(attributes, args, kwargs):
- if not args:
- if kwargs:
- return kwargs
- else:
- return {}
- if not kwargs:
- return dict(zip(attributes, args))
- tmp = dict(zip(attributes, args))
- tmp.update(kwargs)
- return tmp
- def __setAttribute(attributeMap, obj):
- if not attributeMap:
- return obj
- for k in attributeMap.keys():
- setattr(obj, k, attributeMap[k])
- return obj
- def createControl(*args, **kwargs):
- """
- attributes: id
- items
- """
- obj = WapControl()
- attributes = ('id', 'items')
- return __setAttribute(__generateMap(attributes, args, kwargs), obj)
- if __name__ == '__main__':
- table = createControl(tagName='table',cellspacing='0')
- tr = createControl(tagName='tr')
- table.put('tr',tr)
- table.put('tr1',tr)
- td = createControl(tagName='td')
- input = createControl(tagName='input',type="hidden",value="0101",name="fromnaviid",clazz="sssdksdlsd")
- input1 = createControl(tagName='input',type="text",value="0102")
- td.put('input',input)
- td.put('input1',input1)
- td.setText(u'我的名字:')
- tr.put('td',td)
- tr.put('td1',td)
- tr.put('td2',td)
- tr.put('td3',td)
- tr.put('td4',td)
- g = table.toWap('')
- print g
-
复制代码 |
|