I've been happy with lxml.builder which would look something like this:
from lxml.builder import E doc = ( E.author( E.name('Terry Pratchett'), E.genre('Fantasy/Comedy'), E.novels( E.novel('Small Gods', year="1992"), E.novel('The Fifth Elephant', year="1999"), E.novel("Guards! Guards!", year="1989"))))