Aujourd'hui, l'option la plus répandue (et la plus simple) est l'option API ElementTree , qui fait partie de la bibliothèque standard depuis Python 2.5.
Les options disponibles sont les suivantes :
- ElementTree (Implémentation basique et purement Python de ElementTree. Fait partie de la bibliothèque standard depuis la version 2.5)
- cElementTree (Implémentation C optimisée de ElementTree. Également proposé dans la bibliothèque standard depuis la version 2.5. Déclassé et intégré automatiquement dans ElementTree à partir de la version 3.3).
- LXML (basé sur libxml2. Offre un riche surensemble de l'API ElementTree ainsi que XPath, les sélecteurs CSS, et plus encore)
Voici un exemple de la façon de générer votre document d'exemple en utilisant le cElementTree in-stdlib :
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")
Je l'ai testé et cela fonctionne, mais je suppose que les espaces blancs ne sont pas significatifs. Si vous avez besoin d'une indentation "jolie", faites-le moi savoir et je chercherai comment faire. (Il s'agit peut-être d'une option spécifique à LXML. Je n'utilise pas beaucoup l'implémentation stdlib)
Pour en savoir plus, voici quelques liens utiles :
Enfin, cElementTree ou LXML devraient être suffisamment rapides pour répondre à tous vos besoins (les deux sont du code C optimisé), mais si vous êtes dans une situation où vous avez besoin d'exploiter la moindre parcelle de performance, les benchmarks sur le site de LXML l'indiquent :
- LXML l'emporte clairement pour la sérialisation (génération) de XML
- Comme effet secondaire de l'implémentation de la traversée des parents, LXML est un peu plus lent que cElementTree pour l'analyse syntaxique.