免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 21279 | 回复: 0
打印 上一主题 下一主题

另类 python生成XML格式的字串。用于生成HTML,WAP等有用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-02 17:13 |只看该作者 |倒序浏览
废话不多说,直接看代码。随便写了一下,还不完善。想加入XPATH对生成的字串进行相关操作还没来得及。

以博大家一笑了哈。。。。
  1. #-*- coding:utf-8 -*-
  2. """
  3. Created on 2011-6-15
  4. @author: wangkaiping
  5. @description: 动态MUDL、WAP标签、XML生成器
  6.     本工具主要用于快速生成动态MUDL,WAP标签,XML格式的字符串。可以直接使用它生成动态MUDL控件!
  7.    
  8.     说明:
  9.     1:每一个生成的控件只需要传入任意的意数即可,参数可以是字符串也可以控件本身,
  10.                 如果是控件 本身则将控件当作他的子节点进行处理 !
  11.     2:生成每一个控件的时候必须有一个 'tagName'的参数以判断具体生成什么标签,此参数必须有
  12.     3:setText()用于生成控件的文本区域比如: <aa>这里就是setText()的值</aa>
  13.     4: put(key,value)方法用于动态的设置控件的参数 也可以把字节点通过此方法设置上去。
  14.                   程序会自动判断传入的属性还是下级节点
  15.     5: class属性由于在python当中是关键字,请用clazz进行代替
  16.     6: 由于对特殊字符或边界问题异常等问题没作处理,也主要为了便于调试和完善。大家使用时请注意一下
  17.     7:还有很多不完善的地方使用的时候请多反馈一下。性能也未作测试
  18.       
  19.     此工具可以完全脱离动态MUDL一些属性的限制,
  20.     可以直接用来生成WAP再配合FREEMARK模板来完成动态WAP等效果避免写很多的静态页面。
  21.    主要解决WAP返回值时一些多选框,下拉列表等不能动态填值的问题!
  22.    
  23.     EG:
  24.         table = createControl(tagName='table',cellspacing='0')
  25.         tr = createControl(tagName='tr')
  26.         table.put('tr',tr)
  27.         table.put('tr1',tr)
  28.         td = createControl(tagName='td')
  29.         input = createControl(tagName='input',type="hidden",value="0101",name="fromnaviid" )
  30.         input1 = createControl(tagName='input',type="text",value="0102")
  31.         td.put('input',input)
  32.         td.put('input1',input1)
  33.         td.setText(u'我的名字:')
  34.         tr.put('td',td)
  35.         tr.put('td1',td)
  36.         tr.put('td2',td)
  37.         tr.put('td3',td)
  38.         tr.put('td4',td)
  39.         
  40.         g = table.toWap('') #注意,toWap()必须传一个字符串,这里主要是剃归的返回值!
  41.                                             如果是要生成标准的XML请传入<?xml version="1.0" encoding="UTF-8"?>
  42.                                             如果只是生成标签控件,则只需要传入一个空串就行了。
  43.         
  44.     生成的字符串如下:
  45.     <?xml version="1.0" encoding="UTF-8"?>
  46. <table cellspacing="0">
  47.   <tr>
  48.     <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
  49.     <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
  50.     <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
  51.     <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
  52.     <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
  53.   </tr>
  54.   <tr>
  55.     <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
  56.     <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
  57.     <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
  58.     <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
  59.     <td>我的名字:<input name="fromnaviid" type="hidden" value="0101"/><input type="text" value="0102"/></td>
  60.   </tr>
  61. </table>


  62. """

  63. class WapControl():
  64.     __text = ''
  65.     def toWap(self,result):
  66.         allAtt = dir(self)
  67.         tagName = getattr(self, 'tagName')
  68.         child = []
  69.         result = '<'+tagName
  70.         for key in allAtt:
  71.             value = getattr(self,key)
  72.             if key != 'tagName' and key != '__doc__' and key != '_WapControl__text' and key != '__module__' and not callable(value):
  73.                 at = getattr(self, key)
  74.                 flag = isinstance(self,type(at))
  75.                 if not flag:
  76.                     if key == 'clazz':
  77.                         result += ' class="'+str(value)+'" '
  78.                     else:
  79.                         result += ' '+key + '="'+str(value)+'" '
  80.                 else:
  81.                     child.append(at)
  82.         result += '>' + self.__text
  83.         if len(child) > 0 :
  84.             for ch in child:
  85.                 self = ch
  86.                 dd = self.toWap(result)
  87.                 result += dd
  88.         result += '</'+tagName+'>'
  89.         return result
  90.         
  91.     def put(self,key,value):
  92.         setattr(self,key,value)
  93.    
  94.     def setText(self,text):
  95.         self.__text = text
  96.                              

  97. def __generateMap(attributes, args, kwargs):
  98.     if not args:
  99.         if kwargs:
  100.             return kwargs
  101.         else:
  102.             return {}
  103.     if not kwargs:
  104.             return dict(zip(attributes, args))
  105.     tmp = dict(zip(attributes, args))
  106.     tmp.update(kwargs)
  107.     return tmp

  108. def __setAttribute(attributeMap, obj):
  109.     if not attributeMap:
  110.         return obj
  111.     for k in attributeMap.keys():
  112.         setattr(obj, k, attributeMap[k])
  113.     return obj

  114. def createControl(*args, **kwargs):
  115.     """
  116.         attributes:        id
  117.                           items
  118.     """
  119.     obj = WapControl()
  120.     attributes = ('id', 'items')
  121.     return __setAttribute(__generateMap(attributes, args, kwargs), obj)


  122. if __name__ == '__main__':
  123.     table = createControl(tagName='table',cellspacing='0')
  124.     tr = createControl(tagName='tr')
  125.     table.put('tr',tr)
  126.     table.put('tr1',tr)
  127.     td = createControl(tagName='td')
  128.     input = createControl(tagName='input',type="hidden",value="0101",name="fromnaviid",clazz="sssdksdlsd")
  129.     input1 = createControl(tagName='input',type="text",value="0102")
  130.     td.put('input',input)
  131.     td.put('input1',input1)
  132.     td.setText(u'我的名字:')
  133.     tr.put('td',td)
  134.     tr.put('td1',td)
  135.     tr.put('td2',td)
  136.     tr.put('td3',td)
  137.     tr.put('td4',td)
  138.     g = table.toWap('')
  139.     print g

  140.    
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP