Changeset 4
- Timestamp:
- 02/04/02 23:36:15 (7 years ago)
- Files:
-
- trunk/RBPrivate/Prototypes/Shane/XMLBuilder.py (modified) (1 diff)
- trunk/RBPrivate/Prototypes/Shane/XMLObjectify.py (modified) (6 diffs)
- trunk/RBPrivate/Prototypes/Shane/qabex.xml (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBPrivate/Prototypes/Shane/XMLBuilder.py
r3 r4 32 32 33 33 def _char_data(self, data): 34 self._elements[-1]._ datalist.append(data)34 self._elements[-1]._addData(data) 35 35 36 36 def __call__(self, *args, **kw): trunk/RBPrivate/Prototypes/Shane/XMLObjectify.py
r3 r4 16 16 self._attributes = attributes 17 17 self._elements = [] 18 self._datalist = []19 18 20 19 def __getattribute__(self, name): 21 20 if '_' != name[0:1]: 21 xmlName = name.replace('_', '-') 22 22 _attributes = self._attributes 23 if name in _attributes:24 return _attributes[ name]25 result = [x[-1] for x in self._elements if x[-2] == name]23 if xmlName in _attributes: 24 return _attributes[xmlName] 25 result = [x[-1] for x in self._elements if x[-2] == xmlName] 26 26 if result: 27 27 return result … … 30 30 def __setattr__(self, name, value): 31 31 if '_' != name[0:1]: 32 self._attributes[name] = value 32 xmlName = name.replace('_', '-') 33 self._attributes[xmlName] = value 33 34 else: 34 35 return object.__setattr__(self, name, value) … … 36 37 def __delattr__(self, name): 37 38 if '_' != name[0:1]: 38 if name in self._attributes: 39 del self._attributes[name] 39 xmlName = name.replace('_', '-') 40 if xmlName in self._attributes: 41 del self._attributes[xmlName] 40 42 return 41 43 object.__delattr__(self, name) … … 43 45 44 46 def __call__(self): 45 return self._datalist47 return [x[-1] for x in self._elements if not x[-2]] 46 48 47 49 def __str__(self): 48 return ''.join(self ._datalist)50 return ''.join(self()) 49 51 50 52 def __repr__(self): … … 56 58 57 59 def _addData(self, data): 58 self._ datalist.append(data)60 self._elements.append((self.__namespace__, '', data)) 59 61 60 def _toXML(self, strSplit=' \n', nsOuter=''):62 def _toXML(self, strSplit='', nsOuter=''): 61 63 result = ['<%s ' % self.__node__] 62 64 if nsOuter != self.__namespace__: 63 65 result[-1] += 'xmlns=%s ' % quoteattr(self.__namespace__) 64 66 result[-1] += ' '.join(['%s=%s' % (x[0], quoteattr(str(x[1]))) for x in self._attributes.iteritems()]) 65 if self._ datalist or self._elements:67 if self._elements: 66 68 result[-1] += '>' 67 result.extend(escape(''.join(self._datalist))) 68 result.extend([strSplit.join(x[-1]._toXML(strSplit, self.__namespace__)) for x in self._elements]) 69 for ns, node, each in self._elements: 70 if isinstance(each, (str, unicode)): 71 result.append(escape(each)) 72 else: 73 result.append(strSplit.join(each._toXML(strSplit, self.__namespace__))) 69 74 result.append('</%s>' % self.__node__) 70 75 else: result[-1] += '>' … … 90 95 91 96 if __name__ == '__main__': 92 b = Objectifier() 93 o = b('''<character xmlns='Runeblade.Character'><name nick='Shane' complete='Shane William Holloway'/></character>''') 94 print repr(o) 95 print '\n'.join(o._toXML()) 96 97 from pprint import pprint 98 xml = open('qabex.xml', 'r').read() 99 objectifier = Objectifier() 100 obj = objectifier(xml) 101 print repr(obj) 102 print ' ~ ' * 20 103 print '\n'.join(obj._toXML()) 104 print ' ~ ' * 20 105 for each in ['%10s name: %s' % (name.type, name) for name in obj.history[0].heritage[0].name]: 106 print each
