微信公众号

扫码关注官方订阅号

讲师中心
首页
文章
后端开发 web前端 数据库 开发工具 php框架 常见问题 科技 Java 系统教程 电脑教程 硬件教程 手机教程 软件教程 游戏教程 自媒体 新闻
专题
后端开发 web前端 数据库 开发工具 php框架 科技 Java 系统教程 电脑教程 硬件教程 手机教程 软件教程 游戏教程 新闻
AI工具
AI 聊天问答 Agent智能体 AI 文本写作 AI 绘画作图 AI 设计工具 AI 视频创作 AI 音频制作 AI 办公学习 AI 编程开发 Prompt指令
学习
大前端 后端开发 数据库 移动端 运维开发 计算机基础
编程手册
大前端 后端开发 数据库 移动端 运维开发 计算机基础
下载
js特效 网站源码 工具下载 类库下载 网站素材 学习资源 插件扩展 手机/移动开发 手机游戏
搜索
登录/注册
后端开发 web前端 数据库 开发工具 php框架 常见问题 科技 Java 系统教程 电脑教程 硬件教程 手机教程 软件教程 游戏教程
自媒体 新闻
首页 > 微信小程序 > 微信开发 > 正文

Python之XML解析详解

大家讲道理
发布: 2017-04-11 14:10:27
原创
1900人浏览过



什么是XML?

xml 指可扩展标记语言(extensible markup language)。

XML 被设计用来传输和存储数据。

XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。

它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。


python对XML的解析

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

立即学习“Python免费学习笔记(深入)”;

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

1.SAX (simple API for XML )

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

2.DOM(Document Object Model)

将XML数据在内存中解析成一个树,通过对树的操作来操作XML。

3.ElementTree(元素树)

ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。

注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。

本章节使用到的XML实例文件movies.xml内容如下:

<collection shelf="New Arrivals"><movie title="Enemy Behind">
   <type>War, Thriller</type>
   <format>DVD</format>
   <year>2003</year>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Talk about a US-Japan war</description></movie><movie title="Transformers">
   <type>Anime, Science Fiction</type>
   <format>DVD</format>
   <year>1989</year>
   <rating>R</rating>
   <stars>8</stars>
   <description>A schientific fiction</description></movie>
   <movie title="Trigun">
   <type>Anime, Action</type>
   <format>DVD</format>
   <episodes>4</episodes>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Vash the Stampede!</description></movie><movie title="Ishtar">
   <type>Comedy</type>
   <format>VHS</format>
   <rating>PG</rating>
   <stars>2</stars>
   <description>Viewable boredom</description></movie></collection>
登录后复制

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的值为这些字符串。

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

startDocument()方法

页面xml解析自动赋值工具
页面xml解析自动赋值工具

页面xml解析自动赋值工具

页面xml解析自动赋值工具 46
查看详情 页面xml解析自动赋值工具

文档启动的时候调用。

endDocument()方法

解析器到达文档结尾时调用。

startElement(name, attrs)方法

遇到XML开始标签时调用,name是标签的名字,attrs是标签的属性值字典。

endElement(name)方法

遇到XML结束标签时调用。


make_parser方法

以下方法创建一个新的解析器对象并返回。

xml.sax.make_parser( [parser_list] )
登录后复制

参数说明:

  • parser_list - 可选参数,解析器列表


parser方法

以下方法创建一个 SAX 解析器并解析xml文档:

xml.sax.parse( xmlfile, contenthandler[, errorhandler])
登录后复制

参数说明:

  • xmlfile - xml文件名

  • contenthandler - 必须是一个ContentHandler的对象

  • errorhandler - 如果指定该参数,errorhandler必须是一个SAX ErrorHandler对象


parseString方法

parseString方法创建一个XML解析器并解析xml字符串:

xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
登录后复制

参数说明:

  • xmlstring - xml字符串

  • contenthandler - 必须是一个ContentHandler的对象

  • errorhandler - 如果指定该参数,errorhandler必须是一个SAX ErrorHandler对象


Python 解析XML实例

#!/usr/bin/python# -*- coding: UTF-8 -*-import xml.saxclass MovieHandler( xml.sax.ContentHandler ):
   def init(self):
      self.CurrentData = ""
      self.type = ""
      self.format = ""
      self.year = ""
      self.rating = ""
      self.stars = ""
      self.description = ""

   # 元素开始事件处理
   def startElement(self, tag, attributes):
      self.CurrentData = tag      if tag == "movie":
         print "*****Movie*****"
         title = attributes["title"]
         print "Title:", title   # 元素结束事件处理
   def endElement(self, tag):
      if self.CurrentData == "type":
         print "Type:", self.type      elif self.CurrentData == "format":
         print "Format:", self.format      elif self.CurrentData == "year":
         print "Year:", self.year      elif self.CurrentData == "rating":
         print "Rating:", self.rating
      elif self.CurrentData == "stars":
         print "Stars:", self.stars
      elif self.CurrentData == "description":
         print "Description:", self.description
      self.CurrentData = ""

   # 内容事件处理
   def characters(self, content):
      if self.CurrentData == "type":
         self.type = content
      elif self.CurrentData == "format":
         self.format = content
      elif self.CurrentData == "year":
         self.year = content
      elif self.CurrentData == "rating":
         self.rating = content
      elif self.CurrentData == "stars":
         self.stars = content
      elif self.CurrentData == "description":
         self.description = content
  
if ( name == "main"):
   
   # 创建一个 XMLReader
   parser = xml.sax.make_parser()
   # turn off namepsaces
   parser.setFeature(xml.sax.handler.feature_namespaces, 0)

   # 重写 ContextHandler
   Handler = MovieHandler()
   parser.setContentHandler( Handler )
   
   parser.parse("movies.xml")
登录后复制

以上代码执行结果如下:

*****Movie*****Title: Enemy BehindType: War, ThrillerFormat: DVDYear: 2003Rating: PGStars: 10Description: Talk about a US-Japan war*****Movie*****Title: TransformersType: Anime, Science FictionFormat: DVDYear: 1989Rating: RStars: 8Description: A schientific fiction*****Movie*****Title: TrigunType: Anime, ActionFormat: DVDRating: PGStars: 10Description: Vash the Stampede!*****Movie*****Title: IshtarType: ComedyFormat: VHSRating: PGStars: 2Description: Viewable boredom
登录后复制

使用xml.dom解析xml

文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。

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

python中用xml.dom.minidom来解析xml文件,实例如下:

#!/usr/bin/python# -*- coding: UTF-8 -*-from xml.dom.minidom import parseimport xml.dom.minidom# 使用minidom解析器打开 XML 文档DOMTree = xml.dom.minidom.parse("movies.xml")collection = DOMTree.documentElementif collection.hasAttribute("shelf"):
   print "Root element : %s" % collection.getAttribute("shelf")# 在集合中获取所有电影movies = collection.getElementsByTagName("movie")# 打印每部电影的详细信息for movie in movies:
   print "*****Movie*****"
   if movie.hasAttribute("title"):
      print "Title: %s" % movie.getAttribute("title")

   type = movie.getElementsByTagName('type')[0]
   print "Type: %s" % type.childNodes[0].data
   format = movie.getElementsByTagName('format')[0]
   print "Format: %s" % format.childNodes[0].data
   rating = movie.getElementsByTagName('rating')[0]
   print "Rating: %s" % rating.childNodes[0].data
   description = movie.getElementsByTagName('description')[0]
   print "Description: %s" % description.childNodes[0].data
登录后复制

以上程序执行结果如下:

Root element : New Arrivals*****Movie*****Title: Enemy BehindType: War, ThrillerFormat: DVDRating: PGDescription: Talk about a US-Japan war*****Movie*****Title: TransformersType: Anime, Science FictionFormat: DVDRating: RDescription: A schientific fiction*****Movie*****Title: TrigunType: Anime, ActionFormat: DVDRating: PGDescription: Vash the Stampede!*****Movie*****Title: IshtarType: ComedyFormat: VHSRating: PGDescription: Viewable boredom
登录后复制

以上就是Python之XML解析详解的详细内容,更多请关注php中文网其它相关文章!

大家都在看:

怎么创建微信公众号自定义菜单栏?这里给出了权威解答 微信小游戏基于微信开发工具入门讲解 微信开发-ACCESS TOKEN 过期失效解决方案 微信公众号开发的详细介绍 详解EgretWing链接微信开发工具调试问题
python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
收藏 点赞
上一篇:解析nodejs微信公众号开发之——1.接入微信公众号 下一篇:微信登录的一些新得
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
  • django开发者模式中的autoreload是怎样实现的
    1970-01-01 08:00:00
  • python os模块使用详解
    1970-01-01 08:00:00
  • python 装饰器
    1970-01-01 08:00:00
  • HTML5本地存储应用sessionStorage和localStorage
    1970-01-01 08:00:00
  • Java程序员成长的钥匙
    1970-01-01 08:00:00
  • SpringMVC详解
    1970-01-01 08:00:00
  • jvm垃圾回收算法
    1970-01-01 08:00:00
  • Java读取excel
    1970-01-01 08:00:00
  • Spring IOC容器
    1970-01-01 08:00:00
  • JAVA垃圾回收机制
    1970-01-01 08:00:00
最新问题
逐条转发与合并转发的区别是什么 逐条转发与合并转发的区别:1、逐条转发就是将消息内容一条一条的转发给其他好友,而合并转发就是将多条消息合并在一起进行转发;2、逐条转发是看不出消息转发来源的,而合并转发可以看到消息的原始发送人。
2022-02-14 11:06:40
48935
实现微信发布文章信息采集 最近有一个客户,需要实现这样一个功能,之前他们在微信公众平台发布文章信息后,还需要在官网再发布一次,这样等于是同样的工作做了两遍,他们想实现在微信公众平台发布文章后,能够同时发布到官网上。
2022-02-12 13:13:15
4047
总结关于Referer丢失的问题(微信H5支付) 最近公司申请了微信的H5支付 相关支付文档见这里 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4发布上线后发起支付 一直报错 商家参数格式有误,请联系商家解决。
2021-08-16 11:29:52
5519
uni-app开发H5端和原生H5开发怎么选择 前些时候刚开发了原生的H5电商系统,从控制器、页面、页面样式、jQuery等开始写,花费了不少的时间很精力。后面开发移动端APP和小程序,使用现在比较流行的uniapp混合开发模式,开始学习需要些时间,可是越写越喜欢,越写越简单。
2021-07-19 12:49:51
4291
如何解决微信支付API v3回调通知出现乱码问题 将微信回调接收到的 wechatpay-signature 字段用base64_decode解码后得到的乱码,怎么办?
2021-07-15 13:55:26
5204
分享微信支付v3版 php解密解密代码 微信支付V3版本小程序支付 php签名,验签,数据解密代码分享;数据解密需要用到sodium扩展 大部分php版本需要安装,证书序列号可以在这里查看https://myssl.com/cert_decode.html。
2021-07-15 13:50:04
4423
【记录】PHP微信小程序 微信支付v3的使用 写小程序发现微信支付有了v3版本, 就想着接个新的支付看看, 结果发现,有毒,记录一下历程。
2021-07-15 13:47:09
4495
微信怎么恢复中文模式 微信恢复中文模式的方法:首先打开微信,找到【Me】,并点击【Setting】;然后在【Setting】中点击【General】;接着在【General】中找到【Language】选项;最后选择【简体中文】,并点击【Save】保存修改即可。
2021-05-17 16:04:13
39253
什么是微信外挂 微信外挂是开发者用来篡改微信正常功能的工具,目的是给微信增加一些乱七八糟的“新”功能,而根本目的其实是为了大规模发送广告或诈骗信息。
2021-04-23 11:17:09
71832
如何删除朋友圈里的某个人 删除朋友圈里的某个人的方法:首先打开微信朋友圈;然后在朋友圈里面找到想要删除的人,点击头像;接着点击界面右上角的【...】符号;最后在【资料设置】中点击【删除】即可。
2021-04-19 15:16:54
59965
相关专题
更多>
  • python除法运算符
  • python 平方
  • python 怎么安装库
  • python中不等于怎么写
  • python输入根号教程
  • 学python所需软件推荐
  • python 一个列表 相关教程大全
  • python内置函数大全
热门推荐
  • 如何解决微信支付API v3回调通知出现乱码问题
  • 分享微信支付v3版 php解密解密代码
  • 微信公众号错误代码10003怎么解决?
  • 微信公众号怎么解冻
  • 微信支付验证或签名失败是什么原因?附三种解决方案
  • python速学教程(入门到精通)
开源免费商场系统广告
热门教程
更多>
相关推荐
热门推荐
最新课程
  • 全面解析Java注解
    全面解析Java注解
    28617次学习
    收藏
  • Django DRF 源码解析
    Django DRF 源码解析
    12022次学习
    收藏
  • layUI前端框架使用详解
    layUI前端框架使用详解
    90073次学习
    收藏
  • JavaScript ES5基础线上课程教学
    JavaScript ES5基础线上课程教学
    64937次学习
    收藏
  • 最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)
    最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)
    1484960次学习
    收藏
  • phpStudy极速入门视频教程
    phpStudy极速入门视频教程
    529754次学习
    收藏
  • 独孤九贱(4)_PHP视频教程
    独孤九贱(4)_PHP视频教程
    1249519次学习
    收藏
  • PHP实战天龙八部之仿爱奇艺电影网站
    PHP实战天龙八部之仿爱奇艺电影网站
    769630次学习
    收藏
  • 最新Python教程 从入门到精通
    最新Python教程 从入门到精通
    2726次学习
    收藏
  • JavaScript ES5基础线上课程教学
    JavaScript ES5基础线上课程教学
    64937次学习
    收藏
  • PHP新手语法线上课程教学
    PHP新手语法线上课程教学
    6428次学习
    收藏
  • 支付宝沙箱支付(个人也能用的支付)
    支付宝沙箱支付(个人也能用的支付)
    4508次学习
    收藏
  • 麻省理工大佬Python课程
    麻省理工大佬Python课程
    41271次学习
    收藏
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
  • [表单按钮] jQuery企业留言表单联系代码
  • [播放器特效] HTML5 MP3音乐盒播放特效
  • [菜单导航] HTML5炫酷粒子动画导航菜单特效
  • [表单按钮] jQuery可视化表单拖拽编辑代码
  • [播放器特效] VUE.JS仿酷狗音乐播放器代码
  • [html5特效] 经典html5推箱子小游戏
  • [图片特效] jQuery滚动添加或减少图片特效
  • [相册特效] CSS3个人相册封面悬停放大特效
  • [企业站源码] 云枫工作室企业网站系统.net2.0
  • [电商源码] MLM营销系统
  • [企业站源码] 六七企业网站管理系统(67CMS)2.0
  • [电商源码] 若冰企业商务平台.net
  • [企业站源码] 08cms企业建站系统 1.0 正式版
  • [电商源码] 带有QQ、MSN、贸易通功能的网站浮动
  • [企业站源码] 缤纷企业管理系统
  • [电商源码] ShopNC网上商店单用户版
  • [网站素材] 创意咖啡糕点美食店海报PSD素材下载
  • [网站素材] 化学实验室器材矢量背景
  • [网站素材] 手绘咖啡器具插图矢量素材
  • [网站素材] 绿色农场主题宣传海报源文件设计下载
  • [网站素材] 彩色海洋珊瑚礁合集矢量素材
  • [网站素材] 极简风格宠物店商务名片设计下载
  • [网站素材] 太空科幻主题童书插画矢量素材
  • [网站素材] 绿色弥散风格黑色星期五促销INS模板下载
  • [前端模板] 驾照考试驾校HTML5网站模板
  • [前端模板] 驾照培训服务机构宣传网站模板
  • [前端模板] HTML5房地产公司宣传网站模板
  • [前端模板] 新鲜有机肉类宣传网站模板
  • [前端模板] 响应式天气预报宣传网站模板
  • [前端模板] 房屋建筑维修公司网站CSS模板
  • [前端模板] 响应式志愿者服务网站模板
  • [前端模板] 创意T恤打印店网站HTML5模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号

微信扫码
关注PHP中文网服务号

技术交流群

QQ扫码
加入技术交流群

PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • PHP学习

  • 技术支持

  • 返回顶部