Python XML的解析与创建

以下内容为装载:
文章出处 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-8
import xml.dom.minidom
from xml.dom.minidom import parse #从xml.dom.minidom模块引入解析器parse

#minidom解析器打开xml文档并将其解析为内存中的一棵树
DOMTree = xml.dom.minidom.parse(r"C:\book.xml")
#获取xml文档对象,就是拿到树的根
booklist = DOMTree.documentElement
if booklist.hasAttribute("type") : 
  #判断根节点booklist是否有type属性,有则获取并打印属性的值
  print "Root element is", booklist.getAttribute("type")

#获取booklist对象中所有book节点的list集合
books = booklist.getElementsByTagName("book")
print "book节点的个数:", books.length

for 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 ET
except 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"


这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值