我有这个问题,AttributeError: type object 'ElementTree' has no attribute 'tostring'
,我不知道什么是错的,我导入到字符串,它不起作用。
尝试按照另一个教程,但没有。
有没有其他方法可以将ElementTree对象转换为XML字符串?
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
答案 0 :(得分:8)
xml.etree.ElementTree.ElementTree
类没有tostring
方法。它是xml.etree.ElementTree
模块中的一个函数。
您已从代码中已存在的模块导入tostring
。变化
rough_string = ElementTree.tostring(elem, 'utf-8', method="xml", short_empty_elements=True)
到
rough_string = tostring(elem, 'utf-8', method="xml")
它应该有用。
short_empty_elements
参数仅在Python 3.4中可用。它在Python 2.7中不起作用。
答案 1 :(得分:1)
你导入了错误的东西。 tostring
是xml.etree.ElementTree
模块中的函数,而不是xml.etree.ElementTree.ElementTree
的方法。