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自动发邮件脚本
Mar 31 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
Apr 11 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
python嵌套字典比较值与取值的实现示例
Nov 03 Python
wxPython实现窗口用图片做背景
Apr 25 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
Python面向对象之类和对象实例详解
Dec 10 Python
BP神经网络原理及Python实现代码
Dec 18 Python
Python实现基于SVM的分类器的方法
Jul 19 Python
Python + Requests + Unittest接口自动化测试实例分析
Dec 12 Python
解决pytorch DataLoader num_workers出现的问题
Jan 14 Python
一篇文章带你了解Python和Java的正则表达式对比
Sep 15 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 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
jquery实现经典的淡入淡出选项卡效果代码
2015/09/22 Javascript
原生js实现class的添加和删除简单代码
2016/07/12 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
2020/08/03 Javascript
Python continue语句用法实例
2014/03/11 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
python @classmethod 的使用场合详解
2019/08/23 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
JPA的优势都有哪些
2013/07/04 面试题
自荐信模版
2013/10/24 职场文书
老师给学生的表扬信
2014/01/17 职场文书
企业新年寄语
2014/04/04 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
社区党的群众路线教育实践活动总结材料
2014/10/31 职场文书
新党员入党决心书
2015/09/22 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书