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 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
Python随机读取文件实现实例
May 25 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
python编写Logistic逻辑回归
Dec 30 Python
python调用c++ ctype list传数组或者返回数组的方法
Feb 13 Python
深入理解Django-Signals信号量
Feb 19 Python
详解用python自制微信机器人,定时发送天气预报
Mar 25 Python
python3.6根据m3u8下载mp4视频
Jun 17 Python
python 画函数曲线示例
Dec 04 Python
关于tf.TFRecordReader()函数的用法解析
Feb 17 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 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
解析strtr函数的效率问题
2013/06/26 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
Python科学计算之Pandas详解
2017/01/15 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
环境科学毕业生自荐信
2013/11/21 职场文书
舞蹈教育学专业推荐信
2013/11/27 职场文书
个人思想理论学习的自我鉴定
2013/11/30 职场文书
迎接领导欢迎词
2014/01/11 职场文书
运动会开幕式邀请函
2014/02/03 职场文书
师德师风建设方案
2014/05/08 职场文书
商场客服专员岗位职责
2014/06/13 职场文书
激励员工的口号
2014/06/16 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书
CSS基础详解
2021/10/16 HTML / CSS