Hi so I've been struggling with this and can't quite figure out why I'm getting errors. Trying to export just some basic XML into a new file, keeps giving me a TypeError. Below is a small sample of the code
from xml.etree.ElementTree import ElementTree
from xml.etree.ElementTree import Element
from xml.etree.ElementTree import SubElement
import xml.etree.ElementTree as ET
root = Element('QuoteWerksXML')
tree = ElementTree(root)
ver = SubElement(root, "AppVersionMajor")
ver.text = '5.1'
tree.write(open('person.xml', 'w'))
The xml.etree.ElementTree module implements a simple and efficient API for parsing and creating XML data. Changed in version 3.3: This module will use a fast implementation whenever available.
To read an XML file using ElementTree, firstly, we import the ElementTree class found inside xml library, under the name ET (common convension). Then passed the filename of the xml file to the ElementTree. parse() method, to enable parsing of our xml file. Then got the root (parent tag) of our xml file using getroot().
The ElementTree.write
method defaults to us-ascii encoding and as such expects a file opened for writing binary:
The output is either a string (str) or binary (bytes). This is controlled by the encoding argument. If encoding is
"unicode"
, the output is a string; otherwise, it’s binary. Note that this may conflict with the type of file if it’s an open file object; make sure you do not try to write a string to a binary stream and vice versa.
So either open the file for writing in binary mode:
with open('person.xml', 'wb') as f:
tree.write(f)
or open the file for writing in text mode and give "unicode"
as encoding:
with open('person.xml', 'w') as f:
tree.write(f, encoding='unicode')
or open the file for writing in binary mode and pass an explicit encoding:
with open('person.xml', 'wb') as f:
tree.write(f, encoding='utf-8')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With