python读取xml文件方法解析


Posted in Python onAugust 04, 2020

关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码。这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使用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>

标签可以有属性:<aaid='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方法获取:

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

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

<?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 相关文章推荐
Python 文件读写操作实例详解
Mar 12 Python
Python命令行参数解析模块optparse使用实例
Apr 13 Python
pyqt5自定义信号实例解析
Jan 31 Python
django创建最简单HTML页面跳转方法
Aug 16 Python
python爬虫 线程池创建并获取文件代码实例
Sep 28 Python
Django 实现Admin自动填充当前用户的示例代码
Nov 18 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
Mar 12 Python
Python eval函数介绍及用法
Nov 09 Python
python 实用工具状态机transitions
Nov 21 Python
python中remove函数的踩坑记录
Jan 04 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 Python
Python+pyaudio实现音频控制示例详解
Jul 23 Python
如何利用python进行时间序列分析
Aug 04 #Python
通过实例简单了解Python sys.argv[]使用方法
Aug 04 #Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 #Python
python logging 重复写日志问题解决办法详解
Aug 04 #Python
Windows下Sqlmap环境安装教程详解
Aug 04 #Python
Python中logger日志模块详解
Aug 04 #Python
Python模块zipfile原理及使用方法详解
Aug 04 #Python
You might like
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
Bootstrap导航条学习使用(一)
2017/02/08 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
flask-restful使用总结
2018/12/04 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
银行实习自我鉴定
2013/10/12 职场文书
2013英文求职信模板范文
2013/11/15 职场文书
成功的酒店创业计划书
2013/12/27 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
党员承诺书格式范文
2015/04/28 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
高三化学教学反思
2016/02/22 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript