Ich bin ein wenig verwirrt durch einige der Design-Entscheidungen in der Python-ElementTree-API - sie scheinen irgendwie willkürlich, so würde ich gerne eine Klärung, um zu sehen, ob diese Entscheidungen einige Logik hinter sich haben sie, oder wenn sie nur mehr oder weniger ad hoc sind.Python ElementTree: ElementTree vs root Element
Im Allgemeinen gibt es zwei Möglichkeiten, wie Sie eine ElementTree
erzeugen können - eine über eine Art Quellstrom, wie eine Datei oder einen anderen I/O-Stream. Dies wird über die parse()
Funktion oder die ElementTree.parse()
Klassenmethode erreicht.
Eine andere Möglichkeit besteht darin, das XML direkt von einem Zeichenfolgenobjekt zu laden. Dies kann über die Funktion fromstring()
erfolgen.
Okay, großartig. Nun würde ich denken, dass diese Funktionen im Wesentlichen identisch sind in Bezug auf was sie zurückgeben - der Unterschied zwischen den beiden ist im Grunde die Quelle der Eingabe (man nimmt eine Datei oder Stream-Objekt, die andere nimmt eine einfache Zeichenfolge) ein Grund gibt die parse()
Funktion ein ElementTree
Objekt zurück, aber die fromstring()
Funktion gibt ein Element
Objekt zurück. Der Unterschied ist im Grunde, dass das Element
Objekt das Wurzel Element einer XML-Struktur ist, während das ElementTree
Objekt eine Art "Wrapper" um das Wurzelelement ist, das einige zusätzliche Features bietet. Sie können das Stammelement immer von einem ElementTree
-Objekt abrufen, indem Sie getroot()
aufrufen.
Dennoch bin ich verwirrt, warum wir diese Unterscheidung haben. Warum gibt fromstring()
ein Wurzelelement direkt zurück, aber parse()
gibt ein Objekt ElementTree
zurück? Gibt es eine Logik hinter dieser Unterscheidung?
Ehrlich zu schreiben, die 'ElementTree' API einige wirklich seltsame Entscheidungen zu Zeiten hat, und Das ist einer von ihnen. – gsnedders
Ich arbeite mit lxml und die api ist das gleiche. Auch ich würde gerne die Antwort auf diese Fragen wissen. Ich tendiere dazu, die Dinge auf der Wrapper-Ebene zu halten, aber ich weiß nicht warum. –
ElementTree hat mehr Funktionen als Element, vor allem 'write()'.Ich sage nicht, dass diese nicht für Element zur Verfügung gestellt werden könnten, aber sie sind große Unterschiede. 'fromstring()', die nur ein Element enthält, verhindert effektiv das Ändern und Schreiben des Baumes. – remram