xml与xml在python中的使用

xml结构

典型例子

<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 中2005为元素的文本

python解析方法

分类

python解析xml的方式有很多种,
1.dom方式
分为minidom和pulldom, 两种方式解析xml速度较慢,内存占用大
2.sax方式
sax方式速度较快,牺牲便捷性换取速度和内存占用
3.ElementTree(ET)方式
与dom方式相比, ET速度较快, api使用的更方便, 与SAX相比性能大致相仿, 但是用户使用起来更方便

ElementTree使用方法

版本

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)

你可能感兴趣的:(python)