ImportError: нет модуля с именем elementtree.SimpleXMLWriter

В моем коде Python я пытаюсь отобразить вывод в формате XML. Для этого я использую XMLwriter,

Но это показывает ошибку:

Traceback (most recent call last):
  File "C:\Users\Ponmani\Desktop\test.cgi", line 8, in <module>
    from elementtree.SimpleXMLWriter import XMLWriter
ImportError: No module named elementtree.SimpleXMLWriter

Строка, которая вызывает ошибку:

from elementtree.SimpleXMLWriter import XMLWriter

Весь мой код на Python:

import os
import cgi
import MySQLdb
import cgitb
from xml.etree.ElementTree import ElementTree
from elementtree.SimpleXMLWriter import XMLWriter
import sys
import SecureDb
cgitb.enable()
print "Content-type: text/xml\n\n";
root=xml.start("root")
conn= MySQLdb.connect(host = SecureDb.host ,user =SecureDb.user ,passwd=SecureDb.password ,db=SecureDb.database)
cursor=conn.cursor()
xml=XMLWriter(sys.stdout)
cursor.execute("select * from register where Name='Subburaj'")
result=cursor.fetchall()
if(result!=()):    
    for colns in result:
         xml.start("Group")
         xml.element("Name","%s" %(colns[0]))
         xml.element("Mail","%s" %(colns[1]))
print result
xml.end()
xml.close(root)
conn.commit()
cursor.close()
conn.close()

2 ответа

ElementTree модуль, поставляемый с Python 2.5 и выше, не включает SimpleXMLWriter модуль; последний полностью отделен от остальных ElementTree функциональность.

Для генерации XML я лично использую язык шаблонов, такой как хамелеон. Вы также можете построить дерево с помощью самого API ElementTree и просто вызвать .write() на результат.

Я не волшебник с XML, однако, похоже, вам нужно либо установить elementtree (очевидно, SimpleXMLWriter не был включен в python2.5... и, возможно, его никогда не загружали в стандартную библиотеку), либо использовать средства в стандартной библиотеке.

Для меня это выглядит примерно так:

import xml.etree.ElementTree as ET
root = ET.Element('root')
#...

for colns in result:
     new_group = ET.SubElement(root,"Group")
     new_elem = ET.SubElement(new_group,"Name")
     new_elem.text = "%s" %(colns[0])
     #I suppose that:
     #ET.SubElement(new_group,"Name").text = str(colns[0])
     #would work too ...
     new_elem = ET.SubElement(new_group,"Mail")
     new_elem.text = "%s" %(colns[0])

Вы можете написать это, используя root.write(),

reference1

reference2

Другие вопросы по тегам