AttributeError: object type 'ElementTree' does not have attribute 'tostring'

I have this problem, AttributeError: type object 'ElementTree' has no attribute 'tostring' , I don’t know what is wrong, I import into a string, this does not work. Try another tutorial, but nothing.

Is there any other way to convert an ElementTree object to an XML string?

 import os import re import glob from xml.dom import minidom from time import strftime from xml.etree.ElementTree import ElementTree from xml.etree.ElementTree import Element, SubElement, Comment, tostring date=strftime("%Y-%m-%dT%H:%M:%S") os.chdir('/home/guillermo/TclsPy/XML_Level2/') def prettify(elem): """Return a pretty-printed XML string for the Element. """ rough_string = ElementTree.tostring(elem, 'utf-8',method="xml" , short_empty_elements=True) reparsed = minidom.parseString(rough_string) return reparsed.toprettyxml(indent=" ") for nameXml in glob.glob("*.xml"): new_nameXml = re.sub(r'tlmy',r'AUX',nameXml,flags=re.IGNORECASE) new_nameXml = re.sub('.xml','_AlarmEnabled.xml',new_nameXml, flags=re.IGNORECASE)#new_nameXml.lower().replace('.xml','_AlarmEnabled.xml') match = re.search(r'TSL_TM_TLMY_(.+).xml', nameXml,flags= re.IGNORECASE ) if match: #Si matchea el patron, guardamos en subsistema lo que esta entre () subsistema = match.group(1) print "Nombre:", new_nameXml print "Subsistema:", subsistema else: print "No matchea:", nameXml # raw_input() #<?xml version="1.0" encoding="UTF-8"?> TSLFunction=Element('TSLFunction') child = SubElement(TSLFunction, 'unit') child.text = '<![CDATA[AUX]]>' child1= SubElement(TSLFunction,'mnemonic') child1.text='<![CDATA'+'['+'AUX::'+'AUX.'+subsistema.replace('.xml','')+'_AlarmEnabled]]' child2=SubElement(TSLFunction, 'body') child2.text='<![CDATA[out = true;]]>' child3=SubElement(TSLFunction,'description') child3.text='<![CDATA[--]]>' child4=SubElement(TSLFunction,'name') child4.text='<![CDATA['+subsistema+'_AlarmEnabled'+']]' child5=SubElement(TSLFunction,'minorVersion') child5.text='0' child6=SubElement(TSLFunction,'majorVersion') child6.text='1' child7=SubElement(TSLFunction,'lastUpdate') child7.text=date child8=SubElement(TSLFunction,'creationDate') child8.text=date child9=SubElement(TSLFunction,'checked') child9.text='false' returnchild=SubElement(TSLFunction,'return') name=SubElement(returnchild,'name') name.text='<![CDATA[out]]>' returnType=SubElement(returnchild,'returnType') returnType.text='boolean' label=SubElement(returnchild,'label') label.text='<![CDATA[--]]>' parameters=SubElement(TSLFunction,'parameters') subtype=SubElement(TSLFunction,'subtype') subtype.text='<![CDATA[TM]]>' prefix=SubElement(TSLFunction,'prefix') prefix.text='<![CDATA[AUX]]>' variable=SubElement(TSLFunction,'variable') variable.text='<![CDATA['+subsistema +'_AlarmEnabled]]' print (subsistema) tree = ElementTree(prettify(TSLFunction)) tree.write('../Alarm/'+new_nameXml)enter code here 
+7
tostring xml elementtree
source share
2 answers

The xml.etree.ElementTree.ElementTree class xml.etree.ElementTree.ElementTree not have a tostring method. This is a function in the xml.etree.ElementTree module.

You have imported tostring from a module already included in your code. Change

 rough_string = ElementTree.tostring(elem, 'utf-8', method="xml", short_empty_elements=True) 

to

 rough_string = tostring(elem, 'utf-8', method="xml") 

and it should work.

The short_empty_elements parameter is only available in Python 3.4. It does not work in Python 2.7.

+6
source share

You are importing the wrong thing. tostring is a function in the xml.etree.ElementTree module, not the xml.etree.ElementTree.ElementTree method.

0
source share

All Articles