Welche XML-Bibliothek für welche Zwecke?

8

Eine Suche nach "python" und "xml" gibt eine Vielzahl von Bibliotheken zur Kombination der beiden zurück.

Diese Liste ist wahrscheinlich fehlerhaft:

  • xml.dom
  • xml.etree
  • xml.sax
  • xml.parsers.expat
  • PyXML
  • beesesoup?
  • HTMLParser
  • htmllib
  • sgmllib

Sei nett, wenn jemand eine kurze Zusammenfassung anbieten kann, wann und warum.

    
John Mee 12.03.2010, 04:02
quelle

4 Antworten

7

Die Aufteilung von DOM / SAX ist grundlegend. Es gilt nicht nur für Python, da DOM und SAX sprachenübergreifend sind.

DOM : Lesen Sie das gesamte Dokument in den Speicher und manipulieren Sie es. Gut für:

  • komplexe Beziehungen zwischen Tags im Markup
  • kleine komplexe XML-Dokumente
  • Vorsicht:
    • Einfach zu viel Speicher zu verwenden

SAX : Parsen Sie das Dokument, während Sie es lesen. Gut für:

  • Lange Dokumente oder offene Datenströme
  • Orte, an denen Speicher eine Einschränkung darstellt
  • Vorsicht:
    • Sie müssen einen statusbehafteten Parser programmieren, was schwierig sein kann

beautifulsoup :

Großartig für HTML oder nicht ganz gut ausgearbeitete Markups. Einfach zu bedienen und schnell. Gut für Screen Scraping, etc. Es kann mit Markup arbeiten, wo die XML-basierten nur durch einen Fehler sagen würde, dass die Markup falsch ist.

Den größten Teil des Rests habe ich nicht benutzt, aber ich glaube nicht, dass es feste Regeln dafür gibt, wann man welche verwenden soll. Nur Ihre Standardüberlegungen: Wer wird den Code pflegen, welche APIs finden Sie am einfachsten? Wie gut funktionieren sie? Usw.

Im Allgemeinen ist es für grundlegende Bedürfnisse nützlich, die Standard-Bibliotheksmodule zu verwenden, da sie "Standard" und somit verfügbar und bekannt sind. Wenn Sie jedoch tief in etwas vertiefen müssen, gibt es fast immer neuere Nichtstandardmodule mit überragender Funktionalität außerhalb der Standardbibliothek.

    
Peter Lyons 12.03.2010, 04:40
quelle
4

Ich finde xml.etree im Wesentlichen für alles ausreichend, außer für BeautifulSoup , wenn ich jemals gebrochenes XML parsen muss (kein übliches Problem, anders als gebrochenes HTML, mit dem BeautifulSoup auch hilft und ist überall): Es bietet eine angemessene Unterstützung für das Lesen ganzer XML-Dokumente im Speicher, Navigieren durch sie, Erstellen von ihnen, schrittweises Parsen großer Dokumente. lxml unterstützt die gleiche Schnittstelle und ist im Allgemeinen schneller - nützlich, um Leistung zu pushen, wenn Sie es sich leisten können, Python-Erweiterungen von Drittanbietern zu installieren (z. B. in App Engine nicht möglich), aber xml.etree ist immer noch vorhanden führen Sie genau den gleichen Code). lxml hat auch mehr Funktionen und bietet auch BeautifulSoup.

Die anderen Bibliotheken, die Sie erwähnen, ahmen APIs nach, die für sehr unterschiedliche Sprachen entwickelt wurden, und im Allgemeinen sehe ich keinen Grund, Python in diese Kreisel zu verwickeln. Wenn Sie sehr spezifische Bedürfnisse haben, wie Unterstützung für xslt, verschiedene Arten von Validierungen, etc, kann es sich lohnen, sich nach anderen Bibliotheken umzuschauen, aber ich hatte solche Bedürfnisse seit langer Zeit nicht mehr, daher bin ich nicht aktuell Angebote für sie.

    
Alex Martelli 12.03.2010 04:51
quelle
1

Bei vielen Problemen kann man mit dem xml auskommen. Es hat den großen Vorteil, Teil der Standardbibliothek zu sein. Dies bedeutet, dass es auf fast jedem System vorinstalliert ist und dass die Schnittstelle statisch ist. Es ist nicht das Beste oder das Schnellste, aber es ist da.

Für alles andere gibt es lxml. Insbesondere eignet sich lxml am besten zum Analysieren von fehlerhaften HTML-, xHTML- oder verdächtigen Feeds. Es verwendet libxml2 und libxslt, um XPath, XSLT und EXSLT zu behandeln. Das Tutorial ist klar und die Benutzeroberfläche ist einfach zu verstehen. Der Rest der erwähnten Bibliotheken existiert, weil lxml in seiner aktuellen Form nicht verfügbar war.

Das ist meine Meinung.

    
Charles Merriam 12.03.2010 05:31
quelle
1

Ich mache nicht viel mit XML, aber wenn ich es brauchte, war lxml eine Freude, mit der ich arbeiten konnte und anscheinend auch ziemlich schnell. Die Elementbaum-API ist in einer objektorientierten Einstellung sehr schön.

    
Autoplectic 12.03.2010 04:40
quelle

Tags und Links