目录:
1. XML解析
2. JSON解析
3. 小知识
目录【Python程序员都知道的入门知识】
python自学之路
1. XML解析
XML即可扩展标记语言(eXtensible Markup Language)
1.1. XML有哪些功能?
传输和存储数据
1.2. 有哪些解析XML的方法?
- SAX(Simple API for XML)
xml.sax
SAX API文档
流式读取XML文件。 - DOM(Document Object Model)
xml.dom
将XML文件以树形结构展示。
DOM API文档 - ElementTree(元素树)
xml.etree.ElementTree
ElementTree API文档
1.3. 三种解析方式有什么优劣?
- DOM:慢,耗内存
- SAX:快,占用内存少,需要用户自己实现回调函数
- ElementTree:代码可用性好,速度快,消耗内存少
很显然,用ElementTree吧。
1.4. 什么是事件处理器ContentHandler?
SAX解析提供的四个处理器之一,SAX的主要回调接口
官方解释怎么用?
- 继承ContentHandler类
- 重写几个方法:
characters(content)
:接收字符数据的通知
startDocument()
:文档启动时的操作
endDocument()
:文档解析完毕时的操作
startElement(name,attrs)
:解析特定元素的开始标签时的操作
endElement(name)
:遇到特定元素的结束标签时的操作
SAX API定义了四种Handler处理工具,分别是:
Content Handler
、DTD Handler
、EntityResolver
、ErrorHandler
。
1.5. 如何使用SAX进行解析?
- 导入模块:
import xml.sax
- 自定义一个数据处理器,继承自ContentHandler
- 通过
xml.sax.make_parser()
获取到解析器对象 - 通过
parser.setContentHandler(handler)
设置数据处理器 - 调用
parser.parse('xmldata.xml')
进行解析
待解析的XML文件:SongData.xml
解析代码:
Paste_Image.png
解析结果:
Paste_Image.png1.6. 如何使用DOM进行解析?
- 导入模块:
import xml.dom.minidom
- 打开文档:
dom = xml.dom.minidom.parse('SongData.xml')
- 获取文档对象:
domObj = dom.documentElement
节点名:domObj.nodeName
节点值:domObj.nodeValue
节点类型:domObj.nodeType
- 获取属性值:
domObj.getAttribute('attr_name')
- 获取子标签列表:
domObj.getElementsByTagName('tag_name')
- 获取标签对数据:
nodelist.childNodes[0].data
或nodelist.firstChild.data
如下,待解析的XML文件还是SongData.xml
1.7. 如何使用ElementTree元素树进行解析?
Python提供了元素树的两种实现方式:
xml.etree.ElementTree
和 xml.etree.cElementTree
其中cElementTree是由C语言所实现,速度比前者更快,内存消耗也更少,推荐使用。
注意python低版本的导入方式:
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
- 导入模块,如上
- 加载文档:
doc = ET.ElementTree(file = 'SongData.xml')
- 获取根节点:
root = doc.getroot()
- 获取子节点列表:
musics = root.findall('music')
- 根据属性名获取属性值:
title = musics.attrib.get('title')
- 根绝名获取属性值:
singer = music.find('singer').text
- 获取子节点:
subElement = music.getChildren()
- 获取标签名和标签值:
subElement.tag,subElement.text
此外利用ET我们还可以对XML文件进行修改。
2. JSON解析
JSON是什么?
JSON即:JavaScript Object Notation,一种轻量级的数据交换格式。
JSON怎么封装和解析?
JSON数据的解析依赖Demjson
模块
下载地址:Demjson Download
加压下载下来的压缩文件:demjson-2.2.4.tar.gz
打开系统的命令提示符,切换到demjson所在的文件目录下
输入:python setup.py install
后回车即可:
如何使用?
- 导入模块:
import demjson
- 编码:
json = demjson.encode(data)
- 解码:
text = demjson.decode(json)
3. 小知识
3.1.字符串拼接后打印
加括号与不加括号的差别:
Paste_Image.png
网友评论