• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python_解析xml

Python_解析xml

作者:夜公子 字体:[增加 减小] 来源:互联网

夜公子通过本文主要向大家介绍了Python,xml等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

python对XML的解析
常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。

python有三种方法解析XML,SAX,DOM,以及ElementTree:

1.SAX (simple API for XML )
python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。

2.DOM(Document Object Model)
将XML数据在内存中解析成一个树,通过对树的操作来操作XML。

本章节使用到的XML实例文件movies.x

有一xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<newis>
    <newi>
        <name>zhangsan</name>
        <age>19</age>
        <sex>男</sex>
    </newi>
    <newi>
        <name>lisi</name>
        <age>22</age>
        <sex>男</sex>
    </newi>
    <newi>
        <name>wangwu</name>
        <age>18</age>
        <sex>女</sex>
    </newi>
</newis>
使用xml.dom解析xml
文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。

一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。

python中用xml.dom.minidom来解析xml文件  列如:

from xml.dom.minidom import parse
#加载xml文件
domTree = parse("newis.xml")
print(domTree)
root = domTree.documentElement
print(root)
#xml中的子节点
ps = root.getElementsByTagName("newi")
#domTree.getElementsByTagName()
#循环打印xml的内容
for p in ps:
    print(p.getElementsByTagName("name")[0].childNodes[0].data)
    print(p.getElementsByTagName("age")[0].childNodes[0].data)
    print(p.getElementsByTagName("sex")[0].childNodes[0].data)
结果如下:

<xml.dom.minidom.Document object at 0x000001A70F1FE588>
<DOM Element: newis at 0x1a70ef9ecc0>
zhangsan
19
男
lisi
22
男
wangwu
18
女
python使用SAX解析xml
SAX是一种基于事件驱动的API。

利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器。

解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件;

而事件处理器则负责对事件作出相应,对传递的XML数据进行处理。

1、对大型文件进行处理;

2、只需要文件的部分内容,或者只需从文件中得到特定信息。
3、想建立自己的对象模型的时候。
在python中使用sax方式处理xml要先引入xml.sax中的parse函数,还有xml.sax.handler中的ContentHandler。

ContentHandler类方法介绍
characters(content)方法

调用时机:

从行开始,遇到标签之前,存在字符,content的值为这些字符串。

从一个标签,遇到下一个标签之前, 存在字符,content的值为这些字符串。

从一个标签,遇到行结束符之前,存在字符,content的值为这些字符串。

标签可以是开始标签,也可以是结束标签。 列如:

from xml.sax import parse as par
import xml.sax
from xml.sax import ContentHandler
class newi:
    def __init__(self,name=None,age=None,sex=None):
        self.name = name
        self.age = age
        self.sex = sex
    def __str__(self):
        return "{0}\t{1}\t{2}".format(self.name,self.age,self.sex)
newis =[]
class myh(ContentHandler):
    def __init__(self):
        self.newi = None
        self.tag = None
    # 读取元素内容时调用(content:文本内容)
    def characters(self, content):
        if self.tag == "name":
            self.newi.name =content
        if self.tag == "age":
            self.newi.age = content
        if self.tag == "sex":
            self.newi.sex = content
 
    # 元素结束调用(name:元素名称)
    def startElement(self, name, attrs):
        self.tag = name
        if name == "newi":
            self.newi = newi()
 
    # 元素开始调用(name:元素名称,attrs:元素属性)
    def endElement(self, name):
        if name == 'newi':
            global newis  # 引用外部的全局变量
            newis.append(self.newi)
            self.newi = None
        self.tag = None
 
# 创建一个 XMLReader
parser = xml.sax.make_parser()
 
# 关闭命名空间(不验证命名空间)
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
 
# 重写 ContextHandler
parser.setContentHandler(myh())
 
# 解析xml文档
parser.parse("newis.xml")
for y in newis:
    print(y)
结果如下:

zhangsan    19    男
lisi    22    男
wangwu    18    女

 

您可能想查找下面的文章:

  • Python底层封装实现方法详解
  • Python实现随机生成任意数量车牌号
  • 使用Python实现Wake On Lan远程开机功能
  • python动态文本进度条的实例代码
  • python基于property()函数定义属性
  • Python 常用的安装Module方式汇总
  • python中OrderedDict的使用方法详解
  • Python编程生成随机用户名及密码的方法示例
  • Python实现统计文本文件字数的方法
  • Python部署web开发程序的几种方法

相关文章

  • Python中的变量和作用域详解
  • Python中使用Flask、MongoDB搭建简易图片服务器
  • Python pass详细介绍及实例代码
  • 在SAE上部署Python的Django框架的一些问题汇总
  • paramiko模块安装和使用(远程登录服务器)
  • 用pickle存储Python的原生对象方法
  • Python Requests 基础入门
  • Python根据区号生成手机号码的方法
  • python 安装virtualenv和virtualenvwrapper的方法
  • python类的继承实例详解

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
    • python 文件操作api(文件操作函数)
    • Python 常用的安装Module方式汇总
    • python 性能提升的几种方法
    • Python 面向对象 成员的访问约束
    • Python 文件操作实现代码
    • 深入理解python对json的操作总结
    • python实现可以断点续传和并发的ftp程序
    • Python学习之asyncore模块用法实例教程
    • Python字符串和文件操作常用函数分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有