解析XML到wx.Python RichTextCtrl
问题描述:
我想显示在wx.Python RichTextCtrl一些文字,但我得到一个错误:解析XML到wx.Python RichTextCtrl
XML parsing error: 'not well-formed (invalid token)' at line 1
具有讽刺意味的是,由RichTextXMLHandler生成的XML。我的代码是:
import wx
import wx.richtext as rt
from StringIO import StringIO
from lxml import objectify
class DisplayXML(wx.Frame):
def __init__(self, parent):
super(DisplayXML, self).__init__(parent)
self.InitUI()
self.SetTitle('Display XML')
self.Layout()
self.Fit()
self.Center()
self.Show()
self.DisplayRTF()
def InitUI(self):
self.txtRTF=rt.RichTextCtrl(self, size=(650,275), style=wx.VSCROLL|wx.HSCROLL);
mainSizer=wx.BoxSizer(wx.HORIZONTAL)
mainSizer.Add(self.txtRTF)
self.SetSizer(mainSizer)
self.InputXML='<?xml version="1.0" encoding="UTF-8"?>' + \
'<richtext version="1.0.0.0" xmlns="http://www.wxwidgets.org">' + \
'<paragraphlayout textcolor="#4C4C4C" fontsize="11" fontstyle="90"' + \
'fontweight="90" fontunderlined="0" fontface="Ubuntu" alignment="1"' + \
'parspacingafter="10" parspacingbefore="0" linespacing="10">' + \
'<paragraph alignment="2">' + \
'<text>Centred text</text>' + \
'</paragraph>' + \
'</paragraphlayout>' + \
'</richtext>'
def DisplayRTF(self):
rtfXML=self.InputXML
#print rtfXML
#root = objectify.fromstring(rtfXML)
#print root.paragraphlayout.paragraph.getchildren()[0]
out = StringIO()
handler=wx.richtext.RichTextXMLHandler()
buffer=self.txtRTF.GetBuffer()
buffer.AddHandler(handler)
out.write(rtfXML)
out.seek(0)
handler.LoadStream(buffer, out)
self.txtRTF.Refresh()
self.txtRTF.SetValue(self.InputXML)
if __name__ == '__main__':
DisplayXMLApp=wx.App()
DisplayXML(None)
DisplayXMLApp.MainLoop()
有人可以告诉我我要去哪里吗?
答
我错了。通过确保xml代码被转换为字符串数据类型已解决该问题
如果没有人可以帮助,任何人都可以指出一个示例,显示这可能会如何工作?谢谢 – Psionman
好的。尝试消除后,解析器所反对的标记为'alignment =“1”'。如果我删除这个rtbox显示。谁能建议为什么这个XML是由RichTextXMLHandler生成的 – Psionman
我错了。该问题已经通过确保xml代码被转换为字符串数据类型来解决 – Psionman