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()
,