--- /dev/null
+"""
+Build a GUI Tree (wxWindows) from an XML file
+using pyExpat
+"""
+
+import sys,string
+from xml.parsers import pyexpat
+
+from wxPython.wx import *
+
+class MyFrame(wxFrame):
+ def __init__(self, parent, id, title):
+ wxFrame.__init__(self, parent, id, title, wxPoint(100, 100), wxSize(160,100))
+ menu = wxMenu()
+ menu.Append (1001,"Open")
+ menu.Append (1002,"Close")
+ menu.Append (1003,"Exit")
+ menubar = wxMenuBar()
+ menubar.Append (menu,"File")
+ self.SetMenuBar(menubar)
+
+class MyApp(wxApp):
+ def OnInit(self):
+ self.frame = MyFrame(NULL, -1, "Tree View of XML")
+ self.tree = wx.wxTreeCtrl(self.frame, -1)
+ EVT_MENU(self, 1001, self.OnOpen)
+ EVT_MENU(self, 1002, self.OnClose)
+ EVT_MENU(self, 1003, self.OnExit)
+ self.frame.Show(true)
+ self.SetTopWindow(self.frame)
+ return true
+
+ def OnOpen(self,event):
+ f = wxFileDialog(self.frame,"Select a file",".","","*.xml",wxOPEN)
+ if f.ShowModal() == wxID_OK:
+ LoadTree(f.GetPath())
+
+ def OnClose(self,event):
+ self.tree = wx.wxTreeCtrl(self.frame, -1)
+ pass
+
+ def OnExit(self,event):
+ self.OnCloseWindow(event)
+
+ def OnCloseWindow(self, event):
+ self.frame.Destroy()
+
+
+NodeStack = []
+
+# Define a handler for start element events
+def StartElement( name, attrs ):
+ global NodeStack
+ NodeStack.append(app.tree.AppendItem(NodeStack[-1],name))
+
+def EndElement( name ):
+ global NodeStack
+ NodeStack = NodeStack[:-1]
+
+def CharacterData ( data ):
+ global NodeStack
+ if string.strip(data):
+ app.tree.AppendItem(NodeStack[-1],data)
+
+
+def LoadTree (f):
+ print f
+ # Create a parser
+ Parser = pyexpat.ParserCreate()
+
+ # Tell the parser what the start element handler is
+ Parser.StartElementHandler = StartElement
+ Parser.EndElementHandler = EndElement
+ Parser.CharacterDataHandler = CharacterData
+
+ # Parse the XML File
+ ParserStatus = Parser.Parse(open(f,'r').read(), 1)
+ if ParserStatus == 0:
+ print "oops!"
+ raise SystemExit
+
+app = MyApp(0)
+NodeStack = [app.tree.AddRoot("Root")]
+
+
+app.MainLoop()
+raise SystemExit