cu.xml: Sleazy XML Utilities For Python

I like XML. The problems it solves are not hard, but using it precludes solving those problems in spectacularly boneheaded ways.

I do not like writing XML. I don't like typing the tag names twice, I don't like the possibility of mismatching closing tags, and I don't like typing all the insipid angle brackets.

It is, of course, possible to use the DOM to generate XML trees, but code using the DOM is rather verbose. For example, generating the following tree:

<parent a="b">
  <child>0</child>
  <child>1</child>
</parent>

requires the following code, or something like it:

parent = document.createElement('parent')
parent.setAttribute('a', 'b')
for n in xrange(2):
  child = document.createElement('child')
  child.appendChild(document.createTextElement(str(n))
  parent.appendChild(child)

That's just nuts. Printfs would be better.

Enter cu.xml, my sleazy but terse utilities for generating XML:

m = UniveralMaker(document)
parent = m.parent({'a':'b'}, [m.child(str(n)) for n in xrange(2)])

Bwahahahaha!

It was inspired by a similar pattern in Javascript: The Definitive Guide by David Flanagan.

Here's the Python code. It includes several variations on this theme, plus some utility functions for reading data out of DOM trees, and handy values for generating XHTML in particular. Note the extensive use of __call__ and __getattr__. I warned you it was sleazy.

Last modified $Date: 2008-01-14 15:18:41 -0800 (Mon, 14 Jan 2008) $