Changeset 4

Show
Ignore:
Timestamp:
02/04/02 23:36:15 (7 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBPrivate/Prototypes/Shane/XMLBuilder.py

    r3 r4  
    3232 
    3333    def _char_data(self, data): 
    34         self._elements[-1]._datalist.append(data) 
     34        self._elements[-1]._addData(data) 
    3535 
    3636    def __call__(self, *args, **kw): 
  • trunk/RBPrivate/Prototypes/Shane/XMLObjectify.py

    r3 r4  
    1616        self._attributes = attributes 
    1717        self._elements = [] 
    18         self._datalist = [] 
    1918 
    2019    def __getattribute__(self, name): 
    2120        if '_' != name[0:1]: 
     21            xmlName = name.replace('_', '-') 
    2222            _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] 
    2626            if result: 
    2727                return result 
     
    3030    def __setattr__(self, name, value): 
    3131        if '_' != name[0:1]: 
    32             self._attributes[name] = value 
     32            xmlName = name.replace('_', '-') 
     33            self._attributes[xmlName] = value 
    3334        else: 
    3435            return object.__setattr__(self, name, value) 
     
    3637    def __delattr__(self, name): 
    3738        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] 
    4042                return 
    4143        object.__delattr__(self, name) 
     
    4345         
    4446    def __call__(self): 
    45         return self._datalist 
     47        return [x[-1] for x in self._elements if not x[-2]] 
    4648     
    4749    def __str__(self): 
    48         return ''.join(self._datalist
     50        return ''.join(self()
    4951     
    5052    def __repr__(self): 
     
    5658 
    5759    def _addData(self, data): 
    58         self._datalist.append(data
     60        self._elements.append((self.__namespace__, '', data)
    5961 
    60     def _toXML(self, strSplit='\n', nsOuter=''): 
     62    def _toXML(self, strSplit='', nsOuter=''): 
    6163        result = ['<%s ' % self.__node__] 
    6264        if nsOuter != self.__namespace__: 
    6365            result[-1] += 'xmlns=%s ' % quoteattr(self.__namespace__) 
    6466        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: 
    6668            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__))) 
    6974            result.append('</%s>' % self.__node__) 
    7075        else: result[-1] += '>' 
     
    9095 
    9196if __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