Verwenden Sie für ernsthafte Arbeiten mit XML in Python lxml
Python verfügt über eine integrierte ElementTree-Bibliothek, die jedoch von lxml in Bezug auf Geschwindigkeit und Funktionalität erweitert wird (Schemaüberprüfung, Saxophonanalyse, XPath, verschiedene Arten von Iteratoren und viele andere Funktionen).
Sie müssen es installieren, aber an vielen Stellen wird bereits davon ausgegangen, dass es Teil der Standardausrüstung ist (z. B. lässt Google AppEngine keine C-basierten Python-Pakete zu, macht jedoch eine Ausnahme für lxml, pyyaml und einige andere).
Erstellen von XML-Dokumenten mit E-Factory (von lxml)
Ihre Frage bezieht sich auf das Erstellen eines XML-Dokuments.
Mit lxml gibt es viele Methoden und ich habe eine Weile gebraucht, um die zu finden, die einfach zu bedienen und auch leicht zu lesen zu sein scheint.
Beispielcode aus dem lxml-Dokument zur Verwendung von E-Factory (leicht vereinfacht):
Die E-Factory bietet eine einfache und kompakte Syntax zum Generieren von XML und HTML:
>>> from lxml.builder import E
>>> html = page = (
... E.html(
... E.head(
... E.title("This is a sample document")
... ),
... E.body(
... E.h1("Hello!"),
... E.p("This is a paragraph with ", E.b("bold"), " text in it!"),
... E.p("This is another paragraph, with a", "\n ",
... E.a("link", href="http://www.python.org"), "."),
... E.p("Here are some reserved characters: <spam&egg>."),
... )
... )
... )
>>> print(etree.tostring(page, pretty_print=True))
<html>
<head>
<title>This is a sample document</title>
</head>
<body>
<h1>Hello!</h1>
<p>This is a paragraph with <b>bold</b> text in it!</p>
<p>This is another paragraph, with a
<a href="http://www.python.org">link</a>.</p>
<p>Here are some reserved characters: <spam&egg>.</p>
</body>
</html>
Ich schätze es auf E-Factory folgenden Dingen
Code liest sich fast wie das resultierende XML-Dokument
Lesbarkeit zählt.
Ermöglicht die Erstellung von XML-Inhalten
Unterstützt Dinge wie:
- Verwendung von Namespaces
- Textknoten innerhalb eines Elements starten und beenden
- Funktionen zum Formatieren von Attributinhalten (siehe func CLASS im vollständigen lxml-Beispiel )
Ermöglicht gut lesbare Konstrukte mit Listen
z.B:
from lxml import etree
from lxml.builder import E
lst = ["alfa", "beta", "gama"]
xml = E.root(*[E.record(itm) for itm in lst])
etree.tostring(xml, pretty_print=True)
ergebend:
<root>
<record>alfa</record>
<record>beta</record>
<record>gama</record>
</root>
Schlussfolgerungen
Ich empfehle dringend, das lxml-Tutorial zu lesen - es ist sehr gut geschrieben und gibt Ihnen viele weitere Gründe, diese leistungsstarke Bibliothek zu verwenden.
Der einzige Nachteil von lxml ist, dass es kompiliert werden muss. Weitere Tipps zum Installieren von lxml aus dem Radformatpaket innerhalb von Sekundenbruchteilen finden Sie in der SO-Antwort .