I have this problem , AttributeError: type object 'ElementTree' has no attribute 'tostring'
, I don't know what's is wrong, I import to string, It does not work.
Try to follow another tutorial but, nothing.
Is there any other way to convert an ElementTree object into 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
The xml.etree.ElementTree.ElementTree
class does not have a tostring
method. It is a function in the xml.etree.ElementTree
module.
You have imported tostring
from the module already 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.