`
羊小绵
  • 浏览: 50050 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
文章分类
社区版块
存档分类
最新评论

python读xml

阅读更多

什么是xml?

xml即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

 

abc.xml

 

<?xml version="1.0" encoding="utf-8"?>

<catalog>

    <maxid>4</maxid>

    <login username="pytest" passwd='123456'>

        <caption>Python</caption>

        <item id="4">

            <caption>测试</caption>

        </item>

    </login>

    <item id="2">

        <caption>Zope</caption>

    </item>

</catalog>

 

Ok ,从结构上,它很像我们常见的HTML超文本标记语言。但他们被设计的目的是不同的,超文本标记语言被设计用来显示数据,其焦点是数据的外观。它被设计用来传输和存储数据,其焦点是数据的内容。

 

那么它有如下特征:

 

首先,它是有标签对组成,<aa></aa>

 

标签可以有属性:<aa id=’123’></aa>

 

标签对可以嵌入数据:<aa>abc</aa>

 

标签可以嵌入子标签(具有层级关系):

 

<aa>

 

     <bb></bb>

 

</aa>

 

获得标签属性

 

那么,下面来介绍如何用python来读取这种类型的文件。

 

#coding=utf-8

import  xml.dom.minidom

 

#打开xml文档

dom = xml.dom.minidom.parse('abc.xml')

 

#得到文档元素对象

root = dom.documentElement

print root.nodeName

print root.nodeValue

print root.nodeType

print root.ELEMENT_NODE

 

mxl.dom.minidom 模块被用来处理xml文件,所以要先引入。

 

xml.dom.minidom.parse() 用于打开一个xml文件,并将这个文件对象dom变量。

 

documentElement 用于得到dom对象的文档元素,并把获得的对象给root

 

每一个结点都有它的nodeName,nodeValue,nodeType属性。

 

nodeName为结点名字。

 

nodeValue是结点的值,只对文本结点有效。

 

nodeType是结点的类型。catalog是ELEMENT_NODE类型

 

现在有以下几种:

 

'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'

 

NodeTypes - 有名常数

 

http://www.w3school.com.cn/xmldom/dom_nodetype.asp

 

获得子标签

 

现在要获得catalog的子标签以的标签name

 

<?xml version="1.0" encoding="utf-8"?>

<catalog>

       <maxid>4</maxid>

       <login username="pytest" passwd='123456'>

              <caption>Python</caption>

             <item id="4">

                    <caption>测试</caption>

            </item>

    </login>

    <item id="2">

            <caption>Zope</caption>

    </item>

</catalog>

 

对于知道元素名字的子元素,可以使用getElementsByTagName方法获取:

 

#coding=utf-8

import  xml.dom.minidom

 

#打开xml文档

dom = xml.dom.minidom.parse('abc.xml')

 

#得到文档元素对象

root = dom.documentElement

 

bb = root.getElementsByTagName('maxid')

b= bb[0]

print b.nodeName

 

bb = root.getElementsByTagName('login')

b= bb[0]

print b.nodeName

 

如何区分相同标签名字的标签:

 

<?xml version="1.0" encoding="utf-8"?>

<catalog>

       <maxid>4</maxid>

       <login username="pytest" passwd='123456'>

              <caption>Python</caption>

             <item id="4">

                    <caption>测试</caption>

            </item>

    </login>

    <item id="2">

            <caption>Zope</caption>

    </item>

</catalog>

 

<caption>和<item>标签不止一个如何区分?

 

#coding=utf-8

import  xml.dom.minidom

 

#打开xml文档

dom = xml.dom.minidom.parse('abc.xml')

 

#得到文档元素对象

root = dom.documentElement

 

bb = root.getElementsByTagName('caption')

b= bb[2]

print b.nodeName

 

bb = root.getElementsByTagName('item')

b= bb[1]

print b.nodeName

 

root.getElementsByTagName('caption') 获得的是标签为caption 一组标签,b[0]表示一组标签中的第一个;b[2] ,表示这一组标签中的第三个。

 

获得标签属性值

 

<?xml version="1.0" encoding="utf-8"?>

<catalog>

       <maxid>4</maxid>

       <login username="pytest" passwd='123456'>

              <caption>Python</caption>

             <item id="4">

                    <caption>测试</caption>

            </item>

    </login>

    <item id="2">

            <caption>Zope</caption>

    </item>

</catalog>

 

<login>和<item>标签是有属性的,如何获得他们的属性?

 

#coding=utf-8

import  xml.dom.minidom

 

#打开xml文档

dom = xml.dom.minidom.parse('abc.xml')

 

#得到文档元素对象

root = dom.documentElement

 

itemlist = root.getElementsByTagName('login')

item = itemlist[0]

un=item.getAttribute("username")

print un

pd=item.getAttribute("passwd")

print pd

 

ii = root.getElementsByTagName('item')

i1 = ii[0]

i=i1.getAttribute("id")

print i

 

i2 = ii[1]

i=i2.getAttribute("id")

print i

 

getAttribute方法可以获得元素的属性所对应的值。

 

获得标签对之间的数据

 

<?xml version="1.0" encoding="utf-8"?>

<catalog>

       <maxid>4</maxid>

       <login username="pytest" passwd='123456'>

              <caption>Python</caption>

             <item id="4">

                    <caption>测试</caption>

            </item>

    </login>

    <item id="2">

            <caption>Zope</caption>

    </item>

</catalog>

 

<caption>标签对之间是有数据的,如何获得这些数据?

 

获得标签对之间的数据有多种方法,

 

方法一

 

#coding=utf-8

import  xml.dom.minidom

 

#打开xml文档

dom = xml.dom.minidom.parse('abc.xml')

 

#得到文档元素对象

root = dom.documentElement

 

cc=dom.getElementsByTagName('caption')

c1=cc[0]

print c1.firstChild.data

 

c2=cc[1]

print c2.firstChild.data

 

c3=cc[2]

print c3.firstChild.data

 

firstChild 属性返回被选节点的第一个子节点,.data表示获取该节点人数据。

 

方法二

 

#coding=utf-8

from xml.etree import ElementTree as ET

per=ET.parse('abc.xml')

p=per.findall('./login/item')

 

for oneper in p:

    for child in oneper.getchildren():

        print child.tag,':',child.text

 

 

p=per.findall('./item')

 

for oneper in p:

    for child in oneper.getchildren():

        print child.tag,':',child.text

 

方法二有点复杂,所引用模块也与前面的不一样,findall用于指定在哪一级标签下开始遍历。

getchildren方法按照文档顺序返回所有子标签。并输出标签名(child.tag)和标签的数据(child.text)

其实,方法二的作用不在于此,它核心功能是可以遍历某一级标签下的所有子标签。

分享到:
评论

相关推荐

    python 读xml文件

    python 读xml并提取相关信息,python 读xml文件并提取相关信息

    python读取xml文件代码

    示例了利用python对不同层的xml文件进行直接读取的方法。

    python文件对比 xml、excel

    使用python比较文件目录内的xml excel文件,输出对比结果文件, 包含读xml excel 写excel

    python解析xml文件

    python解析xml文件,并对关键字进行匹配,其中包括中文字典树的建立

    python解析xml简单示例

    而且直接读小文件,性能比查询数据库应该更好,下面一个例子,如何用python解析xml数据,xml数据是省份,城市 数据,内容如下: &lt;?xml version=1.0 encoding=utf-8 ?&gt; 直辖市&gt; 北京&gt; &lt;city name=上海

    在Python中处理XML的教程

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

    《Python编程金典》读书笔记

    Python的XML处理 16.1. 知识点 16.2. 良好编程习惯 16.3. 示例 17. 数据库应用程序编程接口(DB-API) 17.1. 知识点 17.2. 良好的编程习惯 17.3. 常见编程错误 17.4. 移植性提示 18. 进程管理 18.1. 知识...

    Python编程入门经典

    15.7 Python中可用的XML库 257 15.8 SAX的含义 257 15.8.1 基于流 258 15.8.2 事件驱动 258 15.8.3 DOM的含义 258 15.8.4 内存中访问 258 15.9 使用SAX或者DOM的 理由 259 15.9.1 能力权衡 259 15.9.2 内存考虑 259 ...

    python操作excel,离线安装包,打包下载

    xlrd,xlwt,xlutils是python操作excel的一个系列,用来处理excel 2003(excel 2007也能读出来,但不能往里写) openpyxl是另一个系列,用来处理excel 2007(不能往excel 2003里写) 安装顺序: 1、先装python, ...

    lagasafn-xml:用于将发布冰岛法律HTML转换为机器可读XML的工具

    用于将发布了冰岛法律HTML转换为机器可读XML的工具。 关于 冰岛法律目前以PDF和HTML格式发布,而这两种方法都不容易或以编程方式方便地进行管理。 该工具解析HTML版本的冰岛法律,并生成有序的XML文件,然后可以将...

    一文秒懂python读写csv xml json文件各种骚操作

    多年来,数据存储的可能格式显著增加,但是,在日常使用中,还是以 CSV 、 JSON 和 XML 占主导地位。 在本文中,我将与你分享在Python中使用这三种流行数据格式及其之间相互转换的最简单方法! CSV 数据 CSV文件是...

    JSON文件及Python对JSON文件的读写操作

    JSON和XML都是互联网上数据交换的主要载体。这篇文章主要介绍了JSON文件及Python对JSON文件的读写操作,需要的朋友可以参考下

    python-bufr:用python编写的通用BUFR文件阅读器。 文件支持类似于 ECMWF BUFR 库

    Python缓冲区 介绍 用python编写的通用BUFR文件阅读器。 文件支持类似于 ECMWF BUFR 库。 目前只支持阅读。 取决于 ECMWF BUFR 库和表 Python 该模块是 Pytroll 项目的一部分。... XML-RPC 服务器/客户端接口

    Python简介.doc

    技术支持和服务 什么是 Python 语言 Python 语言是一种计算机编程语言,作用类似于 c/c++/java/perl/VB/Delphi 等等计算机编程语言,据有非常清晰易读的语法特点,并且是一种高级面向对象的语言 ,用途非常广泛,...

    python-hsreplay:用于创建和解析HSReplay XML文件的Python库

    python-hsreplay 用于HSReplay支持的python模块。安装该库在PyPI上可用。 pip install hsreplay将安装它。...读/写HSReplay XML文件来自from_xml_file&#40;fp&#41;采用类似文件的对象,并将返回一个文档。 如果已经有El

    Python3程序开发指南(第二版).pdf

    第1章,提出了Python的8个关键要素,这些要素足以用于编写完整的Pytho程序。...本章也包括了如何读、写XML文件,包括使用元素树、DOM(文档对象模型)以及SAX(用于XML的简单API)。 第8章回顾了前面一些章节中讲述的

    python基础教程 第三版 袁国忠译

    python基础教程第三版完整版,高清可读 第 19 章 趣味编程 .......................................306 第 20 章 项目 1:自动添加标签...............315 第 21 章 项目 2:绘制图表 .......................332 ...

    kismet_web_viewer:将Kismet netxml文件解析为可读表。 使用python Flask

    Kismet Web查看器将netxml文件解析为可读表。 Kismet网络查看器使用: 数据表引导程序烧瓶json2html关于Kismet Web查看器该项目旨在在本地主机系统上为受信任的用户(我自己)运行。 如果您确实计划在Internet上运行...

Global site tag (gtag.js) - Google Analytics