python解析xml文件操作实例


Posted in Python onOctober 05, 2014

本文实例讲述了python解析xml文件操作的实现方法。分享给大家供大家参考。具体方法如下:

xml文件内容如下:

<?xml version="1.0" ?> 
<!--Simple xml document__chapter 8--> 
<book> 
  <title> 
    sample xml thing 
  </title> 
  <author> 
    <name> 
      <first> 
        ma 
      </first> 
      <last> 
        xiaoju 
      </last> 
    </name> 
    <affiliation> 
      Springs Widgets, Inc. 
    </affiliation> 
  </author> 
  <chapter number="1"> 
    <title> 
      First 
    </title> 
    <para> 
      I think widgets are greate.You should buy lots of them forom 
      <company> 
        Spirngy Widgts, Inc 
      </company> 
    </para> 
  </chapter> 
</book>

python代码:

from xml.dom import minidom, Node 
import re, textwrap 
 
class SampleScanner: 
  """""" 
 
  def __init__(self, doc): 
    """Constructor""" 
    assert(isinstance(doc, minidom.Document)) 
    for child in doc.childNodes: 
      if child.nodeType == Node.ELEMENT_NODE and \ 
        child.tagName == "book": 
        self.handle_book(child) 
         
  def handle_book(self, node): 
     
    for child in node.childNodes: 
      if child.nodeType != Node.ELEMENT_NODE: 
        continue 
      if child.tagName == "title": 
        print "Book titile is:", self.gettext(child.childNodes) 
      if child.tagName == "author": 
        self.handle_author(child) 
      if child.tagName == "chapter": 
        self.handle_chapter(child) 
         
  def handle_chapter(self, node): 
    number = node.getAttribute("number") 
    print "number:", number 
    title_node = node.getElementsByTagName("title") 
    print "title:", self.gettext(title_node) 
     
    for child in node.childNodes: 
      if child.nodeType != Node.ELEMENT_NODE: 
        continue 
      if child.tagName == "para": 
        self.handle_chapter_para(child) 
         
  def handle_chapter_para(self, node): 
    company = "" 
    company = self.gettext(node.getElementsByTagName("company")) 
    print "chapter:para:company", company 
     
         
  def handle_author(self, node): 
    for child in node.childNodes: 
      if child.nodeType != Node.ELEMENT_NODE: 
        continue 
      if child.tagName == "name": 
        self.handle_author_name(child) 
      if child.tagName == "affiliation": 
        print "affiliation:", self.gettext(child.childNodes) 
         
  def handle_author_name(self, node): 
    first = "" 
    last = "" 
    for child in node.childNodes: 
      if child.nodeType != Node.ELEMENT_NODE: 
        continue 
      if child.tagName == "first": 
        first = self.gettext(child.childNodes) 
      if child.tagName == 'last': 
        last = self.gettext(child.childNodes) 
         
    print "firstname:%s,lastname:%s" % (first, last) 
     
         
  def gettext(self, nodelist): 
    retlist = [] 
    for node in nodelist: 
      if node.nodeType == Node.TEXT_NODE: 
        retlist.append(node.wholeText) 
      elif node.hasChildNodes: 
        retlist.append(self.gettext(node.childNodes)) 
         
    return re.sub('\s+', " ", ''.join(retlist)) 
   
         
if __name__=="__main__": 
  doc = minidom.parse("simple.xml") 
  sample = SampleScanner(doc)

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
初学Python实用技巧两则
Aug 29 Python
python友情链接检查方法
Jul 08 Python
python编程开发之类型转换convert实例分析
Nov 13 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
一篇文章快速了解Python的GIL
Jan 12 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
OpenCV图像颜色反转算法详解
May 13 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
Feb 26 Python
详解Python的爬虫框架 Scrapy
Aug 03 Python
flask项目集成swagger的方法
Dec 09 Python
python写xml文件的操作实例
Oct 05 #Python
python实现上传样本到virustotal并查询扫描信息的方法
Oct 05 #Python
python实现计算资源图标crc值的方法
Oct 05 #Python
python求crc32值的方法
Oct 05 #Python
Python获取文件ssdeep值的方法
Oct 05 #Python
python获取Linux下文件版本信息、公司名和产品名的方法
Oct 05 #Python
python获取文件版本信息、公司名和产品名的方法
Oct 05 #Python
You might like
PHP XML操作的各种方法解析(比较详细)
2010/06/17 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
ztree简介_动力节点Java学院整理
2017/07/19 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
Python正则表达式使用经典实例
2016/06/21 Python
深入浅出学习python装饰器
2017/09/29 Python
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
numpy.random模块用法总结
2019/05/27 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
python 实现逻辑回归
2020/12/30 Python
学习新党章思想汇报
2014/01/09 职场文书
小学生家长评语集锦
2014/01/30 职场文书
运动会入场词200字
2014/02/15 职场文书
2014年社区植树节活动方案
2014/02/28 职场文书
优秀经理获奖感言
2014/03/04 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
公历12个月名称的由来
2022/04/12 杂记
vue使用watch监听属性变化
2022/04/30 Vue.js
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle