您的位置:首页 > 编程语言 > Python开发

Python XML的解析与创建

2017-10-18 20:25 501 查看
以下内容为装载:

文章出处 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"


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: