Creating a simple XML file using python
Question: What are my options if I want to create a simple XML file in python? (library
wise)

The xml I want looks like:

    
    
    <root>
     <doc>
         <field1 name="blah">some value1</field1>
         <field2 name="asdfasd">some vlaue2</field2>
     </doc>
    
    </root>
    


Answer: These days, the most popular (and very simple) option is the ElementTree API,
which has been included in the standard library since Python 2.5.

The available options for that are:

  * ElementTree (Basic, pure-Python implementation of ElementTree. Part of the standard library since 2.5)
  * cElementTree (Optimized C implementation of ElementTree. Also offered in the standard library since 2.5)
  * LXML (Based on libxml2. Offers a a rich superset of the ElementTree API as well XPath, CSS Selectors, and more)

Here's an example of how to generate your example document using the in-stdlib
cElementTree:

    
    
    import xml.etree.cElementTree as ET
    
    root = ET.Element("root")
    doc = ET.SubElement(root, "doc")
    
    ET.SubElement(doc, "field1", name="blah").text = "some value1"
    ET.SubElement(doc, "field2", name="asdfasd").text = "some vlaue2"
    
    tree = ET.ElementTree(root)
    tree.write("filename.xml")
    

I've tested it and it works, but I'm assuming whitespace isn't significant. If
you need "prettyprint" indentation, let me know and I'll look up how to do
that. (It may be an LXML-specific option. I don't use the stdlib
implementation much)

For further reading, here are some useful links:

  * [API docs for the implementation in the Python standard library](http://docs.python.org/library/xml.etree.elementtree.html)
  * [Introductory Tutorial](http://effbot.org/zone/element-index.htm) (From the original author's site)
  * [LXML etree tutorial](http://lxml.de/tutorial.html). (With example code for loading the best available option from all major ElementTree implementations)

As a final note, either cElementTree or LXML should be fast enough for all
your needs (both are optimized C code), but in the event you're in a situation
where you need to squeeze out every last bit of performance, the benchmarks on
the LXML site indicate that:

  * LXML clearly wins for serializing (generating) XML
  * As a side-effect of implementing proper parent traversal, LXML is a bit slower than cElementTree for parsing.

