`
shopscor
  • 浏览: 19748 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

python语言解析xml文件的常用的有两种方式

阅读更多
文章来自:http://jordy.easymorse.com/?p=442。

python语言解析xml文件的常用的有两种方式:

    * 通过MiniDom库解析xml文件
    * 通过ElementTree库解析xml文件

MiniDom方式解析xml

xml文件以data.xml为例,具体操作如下:

data.xml:

<?xml version="1.0" encoding="utf-8"?>
<info>
   <intro>保存用户的信息</intro>
    <list id='001'>
        <head>auto_userone</head>
        <name>Jordy</name>
        <number>12345678</number>
        <age>20</age>
        <sex>男</sex>
        <hobby>上网</hobby>
    </list>

   <list id='002'>
        <head>auto_usertwo</head>
        <name>功夫</name>
         <number>34443678</number>
         <age>18</age>
         <sex>男</sex>
         <hobby>功夫</hobby>
     </list>

</info>

1.  得到DOM对象

    DOM是Document Object Model的简称,它是以对象树来表示一个XML。

     import xml.dom.minidom

     #得到dom对象

     dom = xml.dom.minidom.parse("data.xml")

2.  得到文档元素对象

#得到文档元素对象

root = dom.documentElement  #这里得到的是根节点info

#打印根节点的 名字       节点的值      节点类型

print root.nodeName,root.nodeValue,root.nodeType

节点的属性:

每一个节点都有它的nodeName,nodeValue,nodeType属性。nodeName为节点名字。

nodeValue是节点的值,只对文本节点有效。nodeType是节点的类型,现在有以下几种:

‘ATTRIBUTE_NODE’
‘CDATA_SECTION_NODE’
‘COMMENT_NODE’
‘DOCUMENT_FRAGMENT_NODE’
‘DOCUMENT_NODE’
‘DOCUMENT_TYPE_NODE’
‘ELEMENT_NODE’
‘ENTITY_NODE’
‘ENTITY_REFERENCE_NODE’
‘NOTATION_NODE’
‘PROCESSING_INSTRUCTION_NODE’
‘TEXT_NODE’

3.子元素、子节点的访问

对于已经知道元素名字的子元素,可以通过使用getElementsByTagName()方法访问,例:

root.getElementsByTagName("intro") #读取intro子元素

返回的结果是一个列表。

如果要得到某元素下的所有子节点,可以使用childNodes属性:

root.childNodes

getElementsByTagName()可以搜索当前元素的所有子元素,包括所有层次的子元素。childNodes只保存了当前元素的第一层子结点。

比如:我们想要得到intro元素下的值“保存用户的信息”,实现如下代码:

node = root.getElementsByTagName("intro")[0]

for node in node.childNodes:

    if node.nodeType in ( node.TEXT_NODE, node.CDATA_SECTION_NODE):

        print node.data

这种方式在获取元素的文本时,需要先判断才行,所以使用起来感觉不是太方便。



ElementTree库解析xml文件

ElementTree属于python标准库的一部分,ElementTree的parse()方法是这个库的主要入口,它使用文件名或流对象作为参数,parse()方法会立即解析完整个文档,它返回的对象是整个文档的对象,而不是根元素,如果要获取根元素,可以调用getroot()方法。

使用上述的data.xml文档,通过ElementTree库解析的代码:

import xml.etree.ElementTree as ET

#读取xml文件
def load_xml_file(fileName):
    root = ET.parse(fileName).getroot()

    #获取文件描述
    intro = root.find('intro').text
    print intro

    #获取所有list节点
    all_users = root.findall('list')
    #遍历list节点的子元素
    for user in all_users:
        #得到head节点的文本
        head = user.find('head').text
        #得到name节点的文本
        name = user.find('name').text
        #得到sex节点的文本
        sex = user.find('sex').text
        print head,name,sex

if __name__ == '__main__':

    load_xml_file('data.xml')

通过这种方式解析xml文件比起使用minidom库解析xml文件的,操作要方便的多。
分享到:
评论

相关推荐

    python解析xml文件

    python解析xml文件,python语言解析xml文件的常用的有两种方式: 通过MiniDom库解析xml文件 通过ElementTree库解析xml文件

    Python XML 解析

    Python XML 解析 什么是 XML? XML 指可扩展标记语言...常见的 XML 编程接口有 DOM 和 SAX,这两种接口处理 XML 文件的方式不同,当然使用场合也不同。 Python 有三种方法解析 XML,SAX,DOM,以及 Element

    Python3基于sax解析xml操作示例

    本文实例讲述了Python3基于sax解析xml操作。分享给大家供大家参考,具体如下: python使用SAX解析xml SAX是一种基于事件驱动的API。 利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器。 解析器负责读取XML文档,...

    横向对比分析Python解析XML的四种方式

    在最初学习PYTHON的时候,只知道有DOM和SAX两种解析方法,但是其效率都不够理想,由于需要处理的文件数量太大,这两种方式耗时太高无法接受。 在网络搜索后发现,目前应用比较广泛,且效率相对较高的ElementTree也是...

    Python中使用dom模块生成XML文件示例

    在Python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文件,下一篇文章再继续介绍Dom解析XML文件。 在生成XML文件中,我们主要使用下面的方法来完成。 主要方法 1、...

    Python如何对XML 解析

    什么是 XML? XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集...常见的 XML 编程接口有 DOM 和 SAX,这两种接口处理 XML 文件的方式不同,当然使用场合也不同。 Python 有三种方法解析 X

    Python通过DOM和SAX方式解析XML的应用实例分享

    主要介绍了Python通过DOM和SAX方式解析XML的应用实例分享,针对这两种解析方式Python都有相关的模块可供使用,需要的朋友可以参考下

    在Python中处理XML的教程

    XML虽然比JSON复杂,在Web中应用也不如以前多了,...在Python中使用SAX解析XML非常简洁,通常我们关心的事件是start_element,end_element和char_data,准备好这3个函数,然后就可以解析xml了。 举个例子,当SAX解析

    Python3操作YAML文件格式方法解析

    数据及文件通常有三种类型: 配置文件型:如ini,conf,properties文件,适合存储简单变量和配置项,最多支持两层,不适合存储多层嵌套数据 表格矩阵型:如csv,excel等,适合于存储大量同类数据,不适合存储层级...

    Python编程入门经典

    1.3.3 为什么有3种类型的引号 7 1.3.4 使用print()函数 7 1.3.5 理解不同的引号 8 1.4 串联两个字符串 10 1.5 用不同的方法串联字符串 11 1.6 本章小结 12 1.7 习题 13 第2章 数值与运算符 15 2.1 不同类型的数值 15...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    调用DTD文件的方法有两种: 1.直接包含在XML文档内的DTD 你只要在DOCTYPE声明中插入一些特别的说明就可以了,象这样: 我们有一个XML文档: &lt;?xml version="1.0" encoding="GB2312"?&gt; &lt;title&gt;XML轻松学习...

    8583报文解析框架Simple8583.zip

    2)请求数据进入SimpleClient代理,SimpleClient根据传入的值解析xml文件(jaxb实现,做了缓存) 3)根据传入值的mti寻找对应的IsoPackage类,对找到的IsoPackage类进行clone(避免污染),对clone值中的域进行值...

    xml_attribute_match:XML 解析器

    这些文件(相同文件的不同迭代)解析和搜索特定 XML 文档结构以查找用户提供作为输入的一个或多个属性。 然后打印一组特定的关联子属性。 所有版本都采用两种输入类型: 要搜索的属性 XML 文档的位置 ...

    de-wiktionary-parser:用于解析德语wiktionary xml文件的python库,并带有将结果导出为.json格式的选项。 当前版本实现了提取有关德语名词的精选信息(例如性别,词尾变化,特殊单词类型信息),以及提取德语名词和缩写的英文翻译

    用于解析的python库,并带有将结果导出为.json格式的选项。 当前版本将提取有关德语名词的精选信息(例如性别,词尾变化,特殊单词类型信息)和形容词(有关比较程度的形式和信息),以及提取德语名词和缩写的英文...

    html5lib-python:符合标准的库,用于在Python中解析和序列化HTML文档和片段

    html5lib是用于解析HTML的纯Python库。... 用法 简单用法遵循以下模式: ... 或者: ... 默认情况下, document将是xml.etree元素实例。 html5lib尽可能选择加速的ElementTree实现... 支持其他两种树类型: xml.dom.minidom和lx

    python入门到高级全栈工程师培训 第3期 附课件代码

    03 文件归档与两种压缩方式 04 vim编辑器 05 系统启动流程 06 grub加密 07 bios加密 08 top命令 09 free命令 10 进程管理 第6章 01 上节课复习 02 磁盘分区 03 文件系统与挂载 04 挂载信息讲解 05 磁盘用满的两种...

    Python web如何在IIS发布应用过程解析

    Python web应用想要发布使用iis发布有两种方式,这篇文章就为大家介绍一下这两种方式的具体实现: 1.配置HttpPlatform程序 HttpPlatform 模块将套接字连接直接传递到独立的 Python 进程。 借助此传递可根据需要运行...

    asterix-master.zip

    GitHub上下载的asterix解析代码,理念先进,采用xml配置文件来自动构建解析算法,有c++和python两种语言,基于Linux系统开发。值得参考和借鉴

    基于Java和Python的爬虫项目实战源码.zip

    Rhino是一个由Java实现的JavaScript语言解析引擎,Rhino的主要功能是管理脚本执行时的运行环境 非HTML解析: PDF文件:PDFBox解析PDF文件 FontBox:处理PDF字体的Java类库 JempBox处理XMP元数据 的Java类库 Office...

Global site tag (gtag.js) - Google Analytics