Python XML的解析与创建

来源:互联网 发布:linux翻看历史命令记录 编辑:程序博客网 时间:2024/06/07 09:07

以下内容为装载:
文章出处 http://blog.csdn.net/SeeTheWorld518/article/details/49535211


XML解析基本思路是

现将xml 文档内容一次性全部读入内存并解析成树的结构,然后拿到这个树结构的根结点,然后我们就可以通过调用解析XML的一些函数来操作这个树了,也就是操作xml文档数据。



xml.dom解析xml

文件对象模型(Document Object Model,简称DOM),是W3C组织推荐处理可扩展语言的标准编程接口。
一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。
下面是一个简单的xml文档实例(book.xml):

<?xml version="1.0" encoding="utf-8" ?><!--this is a test about xml.--><booklist type="science and engineering">    <book category="math">        <title>learning math</title>        <author>张三</author>        <pageNumber>561</pageNumber>    </book>    <book category="Python">        <title>learning Python</title>        <author>李四</author>        <pageNumber>600</pageNumber>    </book></booklist>

使用Python的xml.dom.minidom模块来解析这个xml文件:

#!/usr/bin/python#coding=utf-8import xml.dom.minidomfrom xml.dom.minidom import parse #从xml.dom.minidom模块引入解析器parse#minidom解析器打开xml文档并将其解析为内存中的一棵树DOMTree = xml.dom.minidom.parse(r"C:\book.xml")#获取xml文档对象,就是拿到树的根booklist = DOMTree.documentElementif booklist.hasAttribute("type") :   #判断根节点booklist是否有type属性,有则获取并打印属性的值  print "Root element is", booklist.getAttribute("type")#获取booklist对象中所有book节点的list集合books = booklist.getElementsByTagName("book")print "book节点的个数:", books.lengthfor book in books :  print "*******************book*******************"  if book.hasAttribute("category") :    print "category is", book.getAttribute("category")  #根据结点名title拿到这个book结点下所有的title结点的集合list。  #[0]表示第一个title标签,因为一个<book>...</book>之间可能会  #定义多个title标签   title = book.getElementsByTagName('title')[0]  print "Title is", title.childNodes[0].data  author = book.getElementsByTagName('author')[0]  print "author is", author.childNodes[0].data  pageNumber = book.getElementsByTagName('pageNumber')[0]  print "pageNumber is", pageNumber.childNodes[0].data

总结: 如果要判断某个节点的属性用的语句是:node.hasAttribute(‘type’)


以下部分我写给我自己看的一些总结

如果使用ET来解析xml文件,这个时候我们可以这么做。

try:    import xml.etree.cElementTree as ETexcept ImportError:    import xml.etree.ElementTree as ET    try:        tree = ET.parse(guifile)        for elem in tree.iter():            if ( elem.tag == 'EventAndHandler' ):                event = elem.get('event')                if( elem.attrib.has_key('realHandler') ):                    realHandler = elem.get('realHandler')                    cmd = "./handlerExtract.sh '{0}' {1}".format(realHandler,eventOutPath)                    os.system(cmd)                else:                    handler = elem.get('handler')                    cmd = "./handlerExtract.sh '{0}' {1}".format(handler,eventOutPath)                    os.system(cmd)                '''                if( elem.attrib.has_key('realHandler') ):                    realHandler = elem.get('realHandler')                    cmd = "./handlerExtract.sh '{0}'".format(realHandler)                    os.system(cmd)                '''    except:        print "cannot parse the GuiHierarchy file!\n"


这里写图片描述

原创粉丝点击