<xml version="1.0" encoding="gbk">
<bookstore>
<book category="CHILDREN">
<title>Herry Pottertitle>
<author>J K. Rowlingauthor>
<year>2005year>
<price>29.99price>
book>
<book category="WEB">
<title>Learning XMLtitle>
<author>E T Rauthor>
<year>2003year>
<price>39.99price>
book>
bookstore>
叫做元素, 上层额叫做父元素, 下层的叫做子元素
中category是元素的属性, 属性的值必须用双引号
中2005为元素的文本
python解析xml的方式有很多种,
1.dom方式
分为minidom和pulldom, 两种方式解析xml速度较慢,内存占用大
2.sax方式
sax方式速度较快,牺牲便捷性换取速度和内存占用
3.ElementTree(ET)方式
与dom方式相比, ET速度较快, api使用的更方便, 与SAX相比性能大致相仿, 但是用户使用起来更方便
xml.etree.cElementTree 用c语言实现的, 速度更快
xml.etree.ElementTree 用python实现的
所以模块导入
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
该例子包含了自己wxpython程序的部分代码
<menu>
<File name="文件">
<Open bind="OnFileMenuOpen">打开Open>
<Save bind="OnFileMenuSave">保存Save>
<SaveAs bind="OnFileMenuSaveAs">另存为SaveAs>
<Exit bind="OnFileMenuExit">退出Exit>
File>
<Edit name="编辑">
<Colour bind="OnEditMenuColor">颜色Colour>
Edit>
<About name="关于">
<Author bind="OnHelpMenuAbout">作者Author>
About>
menu>
PaintMenuBar = wx.MenuBar()
tree = ET.ElementTree(file='menu.xml') #打开xml文件
root = tree.getroot() #getroot函数得到根元素
for RootSon in root:
TmpMenu = wx.Menu()
for RootSonSon in RootSon: #可以用循环的方式来访问子元素
TmpMenuSon = TmpMenu.Append(-1, RootSonSon.text, RootSonSon.text) #RootSonSon.tag .text .attrib 分别代表标签, 文本, 属性
TmpFun = self.GetFunName(str(RootSonSon.attrib['bind'])) #访问属性时, 由于属性是字典, 必须通过字典的方式访问属性
self.Bind(wx.EVT_MENU, TmpFun, TmpMenuSon)
PaintMenuBar.Append(TmpMenu, RootSon.attrib['name'])
self.SetMenuBar(PaintMenuBar)