Sie könnten feststellen, dass ein SAX-Parser für diese Aufgabe besser geeignet ist. Anstatt einen DOM zu erstellen, wandelt ein SAX-Parser die XML-Datei in einen Strom von Elementen um und ruft Funktionen auf, die Sie zur Verfügung stellen, damit Sie jedes Element behandeln können.
Die gute Sache ist, dass SAX-Parser sehr schnell und Speicher-effizient im Vergleich zu DOM-Parsern sein können, und einige müssen nicht einmal alle XML auf einmal gegeben werden, was ideal wäre, wenn Sie 25 GB haben es.
Leider, wenn Sie alle Kontextinformationen benötigen, wie „Ich will Tag <B>
aber nur, wenn es <A>
innen-Tag ist,“ Sie müssen es selbst pflegen, da alle Parser geben Sie „Start-Tag <A>
, Starttag <B>
sind, end tag <B>
, end tag <A>
. " Es sagt Ihnen nie explizit, dass das Tag <B>
innerhalb des Tags <A>
ist, Sie müssen das herausfinden, was Sie gesehen haben. Und wenn du einmal ein Element gesehen hast, ist es weg, es sei denn, du erinnerst dich selbst daran.
Dies wird sehr haarig für komplexe Parsing-Jobs, aber Ihre ist wahrscheinlich überschaubar.
Es kommt vor, dass Pythons Standardbibliothek einen SAX-Parser in xml.sax
hat. Sie möchten wahrscheinlich etwas wie xml.sax.xmlreader.IncrementalParser
.
mögliche Duplikate von [Python-Saxophon zu Lxml für 80 + GB XML] (http://StackOverflow.com/Questions/9809469/Python-Sax-To-Lxml-For-80Gb-Xml) –