我的编程空间,编程开发者的网络收藏夹

[转载] python 解析xml 文件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

[转载] python 解析xml 文件

环境

python:3.4.4

准备xml文件

首先新建一个xml文件,countries.xml。内容是在python官网上看到的。

复制代码
<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank>4</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank>68</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>
复制代码

准备python文件

新建一个test_SAX.py,用来解析xml文件。

复制代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import xml.sax

class CountryHandler( xml.sax.ContentHandler ):
    def __init__(self):
        self.CurrentData = ""
        self.CurrentAttributes = ""
        self.rank = ""
        self.year = ""
        self.gdppc = ""
        self.nei_name = ""
        self.nei_dire = ""

    def startElement(self, tag, attributes):
        self.CurrentData = tag
        self.CurrentAttributes = attributes
        if tag == "country":
            print ("*****Country*****")
            name = attributes["name"]
            print ("Name:", name)
        if tag == "neighbor":
            self.nei_name = attributes["name"]
            self.nei_dire = attributes["direction"]

    def endElement(self, tag):
        if self.CurrentData == "rank":
            print ("Rank:", self.rank)
        elif self.CurrentData == "year":
            print ("Year:", self.year)
        elif self.CurrentData == "gdppc":
            print ("Gdppc:", self.gdppc)
        elif self.CurrentData == "neighbor":
            print ("Neighbor:", self.nei_name,self.nei_dire)
        self.CurrentData = ""
        self.nei_name = ""
        self.nei_dire = ""

    def characters(self, content):
        if self.CurrentData == "rank":
            self.rank = content
        elif self.CurrentData == "year":
            self.year = content
        elif self.CurrentData == "gdppc":
            self.gdppc = content
  
if __name__ == "__main__":
    parser = xml.sax.make_parser()
    parser.setFeature(xml.sax.handler.feature_namespaces, 0)
    Handler = CountryHandler()
    parser.setContentHandler( Handler )
    parser.parse("countries.xml")
复制代码

执行结果

复制代码
>python test_SAX.py
*****Country*****
Name: Liechtenstein
Rank: 1
Year: 2008
Gdppc: 141100
Neighbor: Austria E
Neighbor: Switzerland W
*****Country*****
Name: Singapore
Rank: 4
Year: 2011
Gdppc: 59900
Neighbor: Malaysia N
*****Country*****
Name: Panama
Rank: 68
Year: 2011
Gdppc: 13600
Neighbor: Costa Rica W
Neighbor: Colombia E
复制代码

备注

SAX是一种基于事件驱动的API。

SAX主要包括三种对象: readers,handlers 以及 input sources。即解析器,事件处理器以及输入源。

解析器负责读取输入源,如xml文档,并向事件处理器发送事件,如元素开始和元素结束事件。

事件处理器负责处理事件,对xml文档数据进行处理。

parser = xml.sax.make_parser()

新建并且返回一个 SAX XMLReader 对象。

参见: https://docs.python.org/2/library/xml.sax.html

xml.sax.make_parser([parser_list])
Create and return a SAX XMLReader object. The first parser found will be used. If parser_list is provided, it must be a sequence of strings which name modules that have a function named create_parser(). Modules listed in parser_list will be used before modules in the default list of parsers.

parser.setFeature(xml.sax.handler.feature_namespaces, 0)

设置xml.sax.handler.feature_namespaces值为0。其实就是关闭 namespace模式。

参见:https://docs.python.org/2/library/xml.sax.reader.html

XMLReader.setFeature(featurename, value)
Set the featurename to value. If the feature is not recognized, SAXNotRecognizedException is raised. If the feature or its setting is not supported by the parser, SAXNotSupportedException is raised.

class CountryHandler( xml.sax.ContentHandler )

SAX API 定义了4种handler:content handler,DTD handler,error handlers,和 entity resolvers。

程序只需要实现自己感兴趣的事件的接口,比如我们这里只实现了 ContentHandler接口里的部分方法。

class xml.sax.handler.ContentHandler
This is the main callback interface in SAX, and the one most important to applications. The order of events in this interface mirrors the order of the information in the document.

ContentHandler 有很多方法。具体可参见: https://docs.python.org/2/library/xml.sax.handler.html#contenthandler-objects

我们这里首先新建一个CountryHandler类,继承自 xml.sax.ContentHandler。然后实现了他的 startElement(),endElement() 以及 characters()方法。

def startElement(self, tag, attributes)

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

复制代码
Signals the start of an element in non-namespace mode.

The name parameter contains the raw XML 1.0 name of the element type as a string and the attrs parameter holds an object of the Attributes interface (see The Attributes Interface) containing the attributes of the element. The object passed as attrs may be re-used by the parser; holding on to a reference to it is not a reliable way to keep a copy of the attributes. To keep a copy of the attributes, use the copy() method of the attrs object.
复制代码

def endElement(self, tag)

遇到XML结束标签时调用。tag是标签的名字。

Signals the end of an element in non-namespace mode.
The name parameter contains the name of the element type, just as with the startElement() event.

def characters(self, content)

遇到XML元素内容时调用。content为元素的内容值。

复制代码
Receive notification of character data.

The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity so that the Locator provides useful information.

content may be a Unicode string or a byte string; the expat reader module produces always Unicode strings.
复制代码

parser.setContentHandler( Handler )

设置当前的ContentHandler为我们自己写的handler实例。如果不进行设置,content 事件会被忽略。

参见:https://docs.python.org/2/library/xml.sax.reader.html

XMLReader.setContentHandler(handler)¶
Set the current ContentHandler. If no ContentHandler is set, content events will be discarded.

parser.parse("countries.xml")

开始解析 xml文件。

参见:https://docs.python.org/2/library/xml.sax.reader.html

Process an input source, producing SAX events. The source object can be a system identifier (a string identifying the input source – typically a file name or an URL), a file-like object, or an InputSource object. When parse() returns, the input is completely processed, and the parser object can be discarded or reset. As a limitation, the current implementation only accepts byte streams; processing of character streams is for further study.

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

[转载] python 解析xml 文件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

[转载] python 解析xml 文件

环境python:3.4.4准备xml文件首先新建一个xml文件,countries.xml。内容是在python官网上看到的。 2023-01-30

使用 Java 解析 XML 文件

本文主要讨论,当你在使用 Java 编程语言 来编写软件时,实现持久化配置的方式。

Python如何解析 XML 文档

本文详解Python解析XML文档的方法,包括ElementTree、SAX、lxml和minidom。选择解析器取决于特定需求,如文档大小、自定义要求和高级功能(如XPath)。ElementTree简单易用,适合中小文档;SAX高效,适用于大型文档;lxml功能强大,支持高级功能;minidom提供DOM树直接访问。
Python如何解析 XML 文档
2024-04-02

python解析基于xml格式的日志文件

大家中午好,由于过年一直还没回到状态,好久没分享一波小知识了,今天,继续给大家分享一波Python解析日志的小脚本。 首先,同样的先看看日志是个啥样。都是xml格式的,是不是看着就头晕了??没事,我们先来分析一波。 1.每一段开头都是cat
2022-06-04

Python 解析XML

Python中对两种解析方式的解释:The Python standard library provides a minimal but useful set of interfaces to work with XML.The two m
2023-01-31

Python XML解析

Python XML解析----http://www.w3cschool.cn/python/python-xml.htmlPython中使用ElementTree对XML文件进行解析----http://www.jianshu.com/p
2023-01-31

Android中怎么解析XML文件

本篇文章给大家分享的是有关Android中怎么解析XML文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。XMLXML(eXtensible Markup Language)中
2023-05-30

Python怎么批量将csv文件转化成xml文件

这篇文章主要介绍了Python怎么批量将csv文件转化成xml文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python主要应用领域有哪些1、云计算,典型应用OpenSt
2023-06-15

详解android使用SAX解析XML文件

解析XML的方式有很多种,大家比较熟悉的可能就是DOM解析。 DOM(文件对象模型)解析:解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以根据DOM接口来操作这个树结构了。 优点:整个文档读入内存,方便操作:支持修改、删除和
2022-06-06

python中的txt文件怎么转换为XML

这篇文章主要介绍了python中的txt文件怎么转换为XML的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python中的txt文件怎么转换为XML文章都会有所收获,下面我们一起来看看吧。txt文件转换为XML
2023-07-04

python3基础学习(XML文件解析)

对于RSS源的XML文件,开头如下:  对于这类xml的解析代码如下:f
2023-01-31

Python批量将csv文件转化成xml文件的实例

一、前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的
2022-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录