Python xml ElementTree ze źródła ciągu?

118

ElementTree.parse czyta z pliku, jak mogę tego użyć, jeśli mam już dane XML w ciągu?

Może czegoś mi brakuje, ale musi istnieć sposób na użycie elementu ElementTree bez zapisywania ciągu znaków do pliku i ponownego czytania.

xml.etree.elementtree

Jerzy
źródło
2
Cześć George, byłoby wspaniale, gdybyś mógł zaakceptować drugą odpowiedź (dgassaway) jako poprawną.
famargar

Odpowiedzi:

89

Jeśli używasz xml.etree.ElementTree.parsedo analizowania z pliku, możesz użyć xml.etree.ElementTree.fromstringdo analizy tekstu.

Zobacz xml.etree.ElementTree

Jim H.
źródło
38
Problem polega na tym, że ElementTree.fromstring generuje element, a nie ElementTree! Czy ktoś wie, jak to obejść?
Samuel Lampa,
4
Ten sam problem, o którym wspomniał @SamuelLampa. I nie jest ElementTree, nie jestem w stanie zrobić getroot()tego
Siddharth Menon
23
@SamuelLampa zobacz odpowiedź dgassaway , użyjET.ElementTree(ET.fromstring(xmlstring))
Colin Pickard
6
aby uzyskać poprawną odpowiedź, zobacz tę dostarczoną przez @dgassaway
2.718
Nie zapomnij o oświadczeniach dotyczących importu
Stevoisiak
226

Możesz przeanalizować tekst jako ciąg, który tworzy element, i utworzyć element ElementTree przy użyciu tego elementu.

import xml.etree.ElementTree as ET
tree = ET.ElementTree(ET.fromstring(xmlstring))

Właśnie natknąłem się na ten problem, a dokumentacja, chociaż jest kompletna, nie jest bardzo prosta w zakresie różnic w użyciu między metodami parse()i fromstring().

dgassaway
źródło
5
Druga linia może być prosta root = ET.fromstring(xmlstring). Równa się ET.parse('file.xml').getroot(): docs.python.org/3.6/library/…
Anton Tarasenko
3
@Anton, jak stwierdza OP, chodzi o wygenerowanie drzewa elementu, a nie elementu. Jest to przydatne, na przykład, gdy chcesz użyć ElementTree.write ().
batbrat
17

Potrzebujesz xml.etree.ElementTree.fromstring(text)

from xml.etree.ElementTree import XML, fromstring
myxml = fromstring(text)
karlcow
źródło