XMLBuilder is tiny library build on top of ElementTree.TreeBuilder to
make xml files creation more pythonomic. `XMLBuilder` use `with`
statement and attribute access to define xml document structure.
Only 2.5+ python versions are supported.

from __future__ import with_statement # only for python 2.5
from xmlbuilder import XMLBuilder

x = XMLBuilder('root')
x.some_tag
x.some_tag_with_data('text', a='12')

with x.some_tree(a='1'):
    with x.data:
        x.mmm
        for i in range(10):
            x.node(val=str(i))

etree_node = ~x # <= return xml.etree.ElementTree object
print str(x) # <= string object

will result:

<?xml version="1.0" encoding="utf-8" ?>
<root>
    <some_tag />
    <some_tag_with_data a="12">text</some_tag_with_data>
    <some_tree a="1">
        <data>
            <mmm />
            <node val="0" />
            <node val="1" />
            <node val="2" />
            <node val="3" />
            <node val="4" />
            <node val="5" />
            <node val="6" />
            <node val="7" />
            <node val="8" />
            <node val="9" />
        </data>
    </some_tree>
</root>

There some fields, which allow xml output customization:

formatted = produce formatted xml. default = True
tabstep   = tab string, used for formatting. default = ' ' * 4
encoding  = xml document encoding. default = 'utf-8'
xml_header = add xml header
                (<?xml version="1.0" encoding="$DOCUMENT_ENCODING$">)
            to begining of the document. default = True
builder = builder class, used for create dcument. Default =
                        xml.etree.ElementTree.TreeBuilder

Options can be readed by

x = XMLBuilder('root')
print x[option_name]

and changed by

x[option_name] = new_val

Look at xmlbuilder/test.py for UT and more examples.
Happy xml'ing.