Changeset 740
- Timestamp:
- 02/06/04 04:05:14 (4 years ago)
- Files:
-
- trunk/RBFoundation/RBFoundation/XMLNode.py (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBFoundation/RBFoundation/XMLNode.py
r706 r740 61 61 62 62 class xmlnodebase(object): 63 pass 63 def __str__(self): 64 """Returns xmlnode as a string in XML form.""" 65 return str(self.toxml()) 66 67 def toxml(self, pretty=False, level=0, indent=' ', newline='\n'): 68 raise NotImplementedError 69 70 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 72 class xmlcomment(xmlnodebase): 73 def __init__(self, comment): 74 self.comment = comment 75 76 def toxml(self, pretty=False, level=0, indent=' ', newline='\n'): 77 comment = self.comment.replace('<!--', '').replace('-->', '') 78 if not pretty: 79 return '<!-- ' + comment + ' -->' 80 else: 81 result = ['<!--'] + list(comment.split(newline)) + ['-->'] 82 if len(result) > 3: 83 joinstr = newline+indent*level 84 else: joinstr = ' ' 85 return joinstr.join(result) 86 87 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 64 88 65 89 class xmlnode(xmlnodebase): … … 175 199 return '''<%s (%r, %r, %r)>''' % (self.__class__.__name__, self.node, self.namespace, self.prefix) 176 200 177 def __str__(self):178 """Returns xmlnode as a string in XML form."""179 return str(self.toxml())180 181 201 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 182 202 #~ Public Methods … … 187 207 if args: self.attrs.update(dict(args)) 188 208 if kw: self.attrs.update(kw) 209 return self 189 210 190 211 def adddata(self, cdata): 191 212 """Adds a child cdata to xmlnode.""" 192 213 self.elems.append(cdata) 214 return self 215 216 def addcomment(self, comment, *args, **kw): 217 self.elems.append(xmlcomment(comment, *args, **kw)) 193 218 return self 194 219 … … 260 285 def enumdata(self, match=None, idxonly=True): 261 286 """Returns a generator to iterate through the matching data indices in xmlnode""" 262 if not match: match = _any287 if match is None: match = _any 263 288 elif callable(match): match = matchobj(match) 264 289 idx = 0 265 290 for each in self.elems: 266 291 if isinstance(each, basestring): 267 if each == match:292 if match == each: 268 293 if idxonly: yield idx 269 294 else: yield idx, each … … 272 297 def iterdata(self, match=None): 273 298 """Returns a generator to iterate through the matching data in xmlnode""" 274 if not match: match = _any299 if match is None: match = _any 275 300 elif callable(match): match = matchobj(match) 276 301 for each in self.elems: 277 302 if isinstance(each, basestring): 278 if each == match:303 if match == each: 279 304 yield each 280 305 … … 312 337 return lambda each: node==each.node and namespace==each.namespace and prefix==each.prefix 313 338 match = makematch(*args, **kw) 314 else: match = lambda : True339 else: match = lambda each: True 315 340 idx = 0 316 341 for each in self.elems: … … 328 353 return lambda each: node==each.node and namespace==each.namespace and prefix==each.prefix 329 354 match = makematch(*args, **kw) 330 else: match = lambda : True355 else: match = lambda each: True 331 356 for each in self.elems: 332 357 if not isinstance(each, basestring): … … 467 492 if pretty: prettyindent = newline + indent * level 468 493 result = [] 494 wastext = False 469 495 for elem in self.elems: 470 if pretty: result.append(prettyindent)471 496 if isinstance(elem, basestring): 472 result.append(xmlescape(elem)) 473 else: result.append(elem.toxml(pretty, level, indent, newline)) 497 if pretty and not wastext: result.append(prettyindent) 498 elem = xmlescape(elem) 499 if pretty: 500 elem = elem.replace(newline, prettyindent) 501 result.append(elem) 502 wastext = True 503 else: 504 if pretty: result.append(prettyindent) 505 result.append(elem.toxml(pretty, level, indent, newline)) 506 wastext = False 474 507 return result 475 508
