Reputation: 15571
The ElementTree.parse reads from a file, how can I use this if I already have the XML data in a string?
Maybe I am missing something here, but there must be a way to use the ElementTree without writing out the string to a file and reading it again.
Upvotes: 209
Views: 269952
Reputation: 3713
You can parse the text as a string, which creates an Element, and create an ElementTree using that Element.
import xml.etree.ElementTree as ET
tree = ET.ElementTree(ET.fromstring(xmlstring))
I just came across this issue and the documentation, while complete, is not very straightforward on the difference in usage between the parse()
and fromstring()
methods.
Upvotes: 351
Reputation: 6369
io.StringIO is another option for getting XML into xml.etree.ElementTree:
import io
f = io.StringIO(xmlstring)
tree = ET.parse(f)
root = tree.getroot()
Hovever, it does not affect the XML declaration one would assume to be in tree
(although that's needed for ElementTree.write()). See How to write XML declaration using xml.etree.ElementTree.
Upvotes: 12
Reputation: 5579
If you're using xml.etree.ElementTree.parse
to parse from a file, then you can use xml.etree.ElementTree.fromstring
to get the root Element
of the document. Often you don't actually need an ElementTree
.
Upvotes: 117
Reputation: 6972
You need the xml.etree.ElementTree.fromstring(text)
from xml.etree.ElementTree import XML, fromstring
myxml = fromstring(text)
Upvotes: 21