python解析xml文件操作实例

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • Python获取任意xml节点值的方法

    本文实例讲述了Python获取任意xml节点值的方法.分享给大家供大家参考.具体实现方法如下: # -*- coding: utf-8 -*- import xml.dom.minidom ELEMENT_NODE = xml.dom.Node.ELEMENT_NODE class SimpleXmlGetter(object): def __init__(self, data): if type(data) == str: self.root = xml.dom.minidom.parse(d

  • Python中将字典转换为XML以及相关的命名空间解析

    尽管 xml.etree.ElementTree 库通常用来做解析工作,其实它也可以创建XML文档. 例如,考虑如下这个函数: from xml.etree.ElementTree import Element def dict_to_xml(tag, d): ''' Turn a simple dict of key/value pairs into XML ''' elem = Element(tag) for key, val in d.items(): child = Element(k

  • Python中使用SAX解析xml实例

    SAX是一种基于事件驱动的API.利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器.解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件;而事件处理器则负责对事件作出相应,对传递的XML数据进行处理. 实例: 复制代码 代码如下: import  sys, string from  xml.sax import  handler, make_parser    class  TestHandler(handler.ContentHandler):         

  • Python实现把xml或xsl转换为html格式

    前些天用python处理xml的转换的一个小程序,用来把xml,xsl转换成html. 用的libxml2,所以还要先安装了libxml2模块才能使用. # -*- coding: mbcs -*- #!/usr/bin/python import libxml2, libxslt class compoundXML: def __init__(self): self._result = None self._xsl = None self._xml = None def do(self, xm

  • Python 提取dict转换为xml/json/table并输出的实现代码

    核心代码: #!/usr/bin/python #-*- coding:gbk -*- #设置源文件输出格式 import sys import getopt import json import createDict import myConToXML import myConToTable def getRsDataToDict(): #获取控制台中输入的参数,并根据参数找到源文件获取源数据 csDict={} try: #通过getopt获取参数 opts,args=getopt.geto

  • Python实现对象转换为xml的方法示例

    本文实例讲述了Python实现对象转换为xml的方法.分享给大家供大家参考,具体如下: # -*- coding:UTF-8 -*- ''''' Created on 2010-4-20 @author: 忧里修斯 ''' import xml.etree.ElementTree as ET import xml.dom.minidom as minidom from addrbook.domain import Person class Converter(object): ''''' 实现P

  • python操作xml文件详细介绍

    关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码.这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使用python 来读取xml 文件. 一.什么是xml? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. abc.xml 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <catalo

  • Python实现简单的多任务mysql转xml的方法

    本文实例讲述了Python实现简单的多任务mysql转xml的方法.分享给大家供大家参考,具体如下: 为了需求导出的格式尽量和navicat导出的xml一致. 用的gevent,文件i/o操作会阻塞,所以并不会完全异步. 1. mysql2xml.py: # -*- coding: utf-8 -*- ''' Created on 2014/12/27 @author: Yoki ''' import gevent import pymysql from pymysql.cursors impo

  • Python将xml和xsl转换为html的方法

    本文实例讲述了Python将xml和xsl转换为html的方法.分享给大家供大家参考.具体分析如下: 这里需要用libxml2,所以还要先安装了libxml2模块才能使用.代码如下: # -*- coding: mbcs -*- #!/usr/bin/python import libxml2, libxslt class compoundXML: def __init__(self): self._result = None self._xsl = None self._xml = None

  • Python 解析XML文件

    Python文件: 复制代码 代码如下: #parsexml.py #本例子参考自python联机文档,做了适当改动和添加 import xml.parsers.expat #控制打印缩进 level = 0 #获取某节点名称及属性值集合 def start_element(name, attrs): global level print ' '*level, 'Start element:', name, attrs level = level + 1 #获取某节点结束名称 def end_e

  • python写入xml文件的方法

    本文实例讲述了python写入xml文件的方法.分享给大家供大家参考.具体分析如下: 本范例通过xml模块对xml文件进行写入操作 from xml.dom.minidom import Document doc = Document() people = doc.createElement("people") doc.appendChild(people) aperson = doc.createElement("person") people.appendChi

随机推荐