python网络编程学习笔记(8)XML生成与解析(DOM、ElementTree)

上传人:门**** 文档编号:64243217 上传时间:2022-03-21 格式:DOC 页数:10 大小:110.50KB
收藏 版权申诉 举报 下载
python网络编程学习笔记(8)XML生成与解析(DOM、ElementTree)_第1页
第1页 / 共10页
python网络编程学习笔记(8)XML生成与解析(DOM、ElementTree)_第2页
第2页 / 共10页
python网络编程学习笔记(8)XML生成与解析(DOM、ElementTree)_第3页
第3页 / 共10页
资源描述:

《python网络编程学习笔记(8)XML生成与解析(DOM、ElementTree)》由会员分享,可在线阅读,更多相关《python网络编程学习笔记(8)XML生成与解析(DOM、ElementTree)(10页珍藏版)》请在装配图网上搜索。

1、xml.dom篇 DOM是Document Object Model的简称,XML 文档的高级树型表示。该模型并非只针对 Python,而是一种普通XML 模型。Python 的 DOM 包是基于 SAX 构建的,并且包括在 Python 2.0 的标准 XML 支持里。一、xml.dom的简单介绍、主要方法:minidom.parse(filename):加载读取XML文件doc.documentElement:获取XML文档对象node.getAttribute(AttributeName):获取XML节点属性值node.getElementsByTagName(TagName):获取XM

2、L节点对象集合node.childNodes :返回子节点列表。node.childNodesindex.nodeValue:获取XML节点值node.firstChild:访问第一个节点,等价于pagexml.childNodes0返回Node节点的xml表示的文本:doc = minidom.parse(filename)doc.toxml(UTF-8)访问元素属性:Node.attributesid a.name #就是上面的 id a.value #属性的值 、举例说明例:文件名:book.xml Book message bookone python check 001 200 bo

3、oktwo python learn 002 300 ()创建对象import xml.dom.minidomdom1=xml.dom.minidom.parse(book.xml)()获取根字节root=dom1.documentElement #这里得到的是根节点 print root.nodeName,root.nodeValue,root.nodeType返回结果为:info , None , 1其中:info是指根节点的名称root.nodeNameNone是指根节点的值root.nodeValue是指根节点的类型root.nodeType,更多节点类型如下表:NodeTypeNam

4、ed Constant1ELEMENT_NODE2ATTRIBUTE_NODE3TEXT_NODE4CDATA_SECTION_NODE5ENTITY_REFERENCE_NODE6ENTITY_NODE7PROCESSING_INSTRUCTION_NODE8COMMENT_NODE9DOCUMENT_NODE10DOCUMENT_TYPE_NODE11DOCUMENT_FRAGMENT_NODE12NOTATION_NODE(3)子元素、子节点的访问、返回root子节点列表import xml.dom.minidomdom1=xml.dom.minidom.parse(book.xml)r

5、oot=dom1.documentElement#print root.nodeName,root.nodeValue,root.nodeTypeprint root.childNodes运行结果为:, , , , , , 、获取XML节点值,如返回根节点下第二个子节点intro的值和名字,添加下面一句print root.childNodes1.nodeName,root.childNodes1.nodeValue运行结果为:intro None、访问第一个节点print root.firstChild.nodeName运行结果为:#text、获取已经知道的元素名字的值, 如要获取intro

6、后的book message可以使用下面的方法:import xml.dom.minidomdom1=xml.dom.minidom.parse(book.xml)root=dom1.documentElement#print root.nodeName,root.nodeValue,root.nodeTypenode= root.getElementsByTagName(intro)0for node in node.childNodes: if node.nodeType in (node.TEXT_NODE,node.CDATA_SECTION_NODE): print node.dat

7、a这种方法的不足之处是需要对类型进行判断,使用起来不是很方便。运行结果是:Book message二、解析对上面的xml进行解析方法1 代码如下:#小五义 #xml 解析import xml.dom.minidomdom1=xml.dom.minidom.parse(book.xml)root=dom1.documentElementbook=booknode=root.getElementsByTagName(list)for booklist in booknode: print =*20 print id:+booklist.getAttribute(id) for nodelist i

8、n booklist.childNodes: if nodelist.nodeType =1: print nodelist.nodeName+:, for node in nodelist.childNodes: print node.data运行结果为:= id:001 head: bookone name: python check number: 001 page: 200 = id:002 head: booktwo name: python learn number: 002 page: 300方法二:代码:#小五义 #xml 解析 import xml.dom.minidomdo

9、m1=xml.dom.minidom.parse(book.xml)root=dom1.documentElementbook=booknode=root.getElementsByTagName(list)for booklist in booknode: print =*20 print id:+booklist.getAttribute(id) print head:+booklist.getElementsByTagName(head)0.childNodes0.nodeValue.strip() print name:+booklist.getElementsByTagName(na

10、me)0.childNodes0.nodeValue.strip() print number:+booklist.getElementsByTagName(number)0.childNodes0.nodeValue.strip() print page:+booklist.getElementsByTagName(page)0.childNodes0.nodeValue.strip() 运行结果与方法一一样。比较上面的两个方法,方法一根据xml的树结构进行了多次循环,可读性上不及方法二,方法直接对每一个节点进行操作,更加清晰。为了更加方法程序的调用,可以使用一个list加一个字典进行存储,

11、具体见方法3:#小五义 #xml 解析 import xml.dom.minidom dom1=xml.dom.minidom.parse(book.xml) root=dom1.documentElement book= booknode=root.getElementsByTagName(list) for booklist in booknode: bookdict= bookdictid=booklist.getAttribute(id) bookdicthead=booklist.getElementsByTagName(head)0.childNodes0.nodeValue.st

12、rip() bookdictname=booklist.getElementsByTagName(name)0.childNodes0.nodeValue.strip() bookdictnumber=booklist.getElementsByTagName(number)0.childNodes0.nodeValue.strip() bookdictpage=booklist.getElementsByTagName(page)0.childNodes0.nodeValue.strip() book.append(bookdict) print book运行结果为:head: ubooko

13、ne, page: u200, number: u001, id: u001, name: upython check, head: ubooktwo, page: u300, number: u002, id: u002, name: upython learn该列表里包含了两个字典。三、建立文件这里用方法三得到的结果,建立一个xml文件。# -*- coding: cp936 -*-#小五义 #xml 创建 import xml.domdef create_element(doc,tag,attr): #创建一个元素节点 elementNode=doc.createElement(tag)

14、 #创建一个文本节点 textNode=doc.createTextNode(attr) #将文本节点作为元素节点的子节点 elementNode.appendChild(textNode) return elementNodedom1=xml.dom.getDOMImplementation()#创建文档对象,文档对象用于创建各种节点。doc=dom1.createDocument(None,info,None)top_element = doc.documentElement# 得到根节点books=head: ubookone, page: u200, number: u001, id:

15、 u001, name: upython check, head: ubooktwo, page: u300, number: u002, id: u002, name: upython learnfor book in books: sNode=doc.createElement(list) sNode.setAttribute(id,str(bookid) headNode=create_element(doc,head,bookhead) nameNode=create_element(doc,name,bookname) numberNode=create_element(doc,nu

16、mber,booknumber) pageNode=create_element(doc,page,bookpage) sNode.appendChild(headNode) sNode.appendChild(nameNode) sNode.appendChild(pageNode) top_element.appendChild(sNode)# 将遍历的节点添加到根节点下xmlfile=open(bookdate.xml,w)doc.writexml(xmlfile,addindent= *4, newl=n, encoding=utf-8)xmlfile.close()运行后生成book

17、date.xml文件,该文件与book.xml一样。xml.etree.ElementTree篇依然使用例1的例子,对xml进行解析分析。1、加载XML方法一:直接加载文件import xml.etree.ElementTreeroot=xml.etree.ElementTree.parse(book.xml)方法二:加载指定字符串import xml.etree.ElementTreeroot = xml.etree.ElementTree.fromstring(xmltext)这里xmltext是指定的字符串。、获取节点方法一 利用getiterator方法得到指定节点book_node=

18、root.getiterator(list)方法二 利用getchildren方法得到子节点,如例中,要得到list下面子节点head的值:#小五义 import xml.etree.ElementTreeroot=xml.etree.ElementTree.parse(book.xml)book_node=root.getiterator(list)for node in book_node: book_node_child=node.getchildren()0 print book_node_child.tag+:+book_node_child.text运行结果为:head:booko

19、ne head:booktwo方法三 使用find和findall方法find方法找到指定的第一个节点:# -*- coding: cp936 -*-#小五义 import xml.etree.ElementTreeroot=xml.etree.ElementTree.parse(book.xml)book_find=root.find(list)for note in book_find: print note.tag+:+note.text运行结果:head:bookone name:python check number:001 page:200findall方法将找到指定的所有节点:#

20、 -*- coding: cp936 -*-#小五义 import xml.etree.ElementTreeroot=xml.etree.ElementTree.parse(book.xml)book=root.findall(list)for book_list in book: for note in book_list: print note.tag+:+note.text运行结果:head:bookone name:python check number:001 page:200 head:booktwo name:python learn number:002 page:300、对

21、book.xml进行解析的实例# -*- coding: cp936 -*-#小五义 import xml.etree.ElementTreeroot=xml.etree.ElementTree.parse(book.xml)book=root.findall(list)for book_list in book: print =*20 if book_list.attrib.has_key(id): print id:+book_list.attribid for note in book_list: print note.tag+:+note.textprint =*20运行结果为:= id:001 head:bookone name:python check number:001 page:200 = id:002 head:booktwo name:python learn number:002 page:300 =注意:当要获取属性值时,如list id=001,用attrib方法。当要获取节点值时,如bookone中的bookone用text方法。当要获取节点名时,用tag方法。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!