AttributeError:类型对象'ElementTree'没有属性'tostring'

时间:2013-09-20 14:32:57

标签: xml python-2.7 tostring elementtree

我有这个问题,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

2 个答案:

答案 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)

你导入了错误的东西。 tostringxml.etree.ElementTree模块中的函数,而不是xml.etree.ElementTree.ElementTree的方法。