Python读取xml文件

2023-05-16

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

什么是xml?

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

abc.xml


<?xml version="1.0" encoding="utf-8"?>
<catalog>
    <maxid>4</maxid>
    <login username="pytest" passw='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 - 有名常数

获得子标签

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


<?xml version="1.0" encoding="utf-8"?>
<catalog>
       <maxid>4</maxid>
       <login username="pytest" passw='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" passw='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" passw='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" passw='123456'>
              <caption>Python</caption>
             <item id="4">
                    <caption>测试</caption>
            </item>
    </login>
    <item id="2">
            <caption>Zope</caption>
    </item>
</catalog>  

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

方法一


#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)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python读取xml文件 的相关文章

随机推荐

  • MDK5 Debug调试方法总结

    常见的Debug方法 连接好硬件DAP之后 xff0c 需要进行一些设置 Debug调试按钮分别对应的功能 按钮1 gt reset复位按钮 按钮2 gt run按钮 xff0c 程序运行按钮 按钮3 gt stop按钮 xff0c 程序停
  • 51单片机(DHT11温湿度传感器)

    一 产品介绍 1 运用场景 xff08 温湿度检测系统 xff09 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器 xff0c 应用领域 xff1a 暖通 空调 xff1b 汽车 xff1b 消费品 xff1b 气
  • 单片机毕设分享 智能窗户系统(源码+硬件+论文)

    文章目录 0 前言1 主要功能2 硬件设计 原理图 3 核心软件设计4 实现效果5 最后 0 前言 x1f525 这两年开始毕业设计和毕业答辩的要求和难度不断提升 xff0c 传统的毕设题目缺少创新和亮点 xff0c 往往达不到毕业答辩的要
  • Linux——实施高级存储功能(VDO)

    一 stratis存储 xff1a stratis存储是一种高效率管理存储的方式 xff0c 可实施灵活的文件系统 xff0c 使之随数据动态增长 需要安装stratus cli和stratisd软件包 stratis pool creat
  • 毕业设计 基于单片机的智能窗户系统(源码+硬件+论文)

    文章目录 0 前言1 主要功能2 硬件设计 原理图 3 核心软件设计4 实现效果5 最后 0 前言 x1f525 这两年开始毕业设计和毕业答辩的要求和难度不断提升 xff0c 传统的毕设题目缺少创新和亮点 xff0c 往往达不到毕业答辩的要
  • 立创EDA怎么批量处理元器件

    1 点击编辑 点击查找相似对象 xff08 也可以按快捷键Ctrl 43 Shift 43 F xff09 2 之后弹出这个对话框 xff0c 搜索你需要的条件 种类 xff1a 选择你需要批量查找的元素类型 范围 xff1a 在当前原理图
  • 超声波模块工作原理

    超声波测距模块工作原理 xff08 1 xff09 采用IO口TRIG触发测距 xff0c 给至少10us的高电平信号 xff08 2 xff09 模块自动发送8个40khz的方波 xff0c 自动检测是否有信号返回 xff1b xff08
  • GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=(u32)8<<12;(学习笔记)

    看原子哥的IIC h文件看到这两个语句有点懵 xff0c 去找了半天资料才懵懵懂懂 xff0c 下面简单记录一下 xff0c 以防下次又忘了 就拿这个举例把 xff0c GPIO一组有 xff08 0 15 xff09 一共16个 前 xf
  • C#public,protected,private,internal,protected internal学习笔记

    比如说 xff1a 一个人A为父类 xff0c 他的儿子B xff0c 妻子C xff0c 私生子D xff08 注 xff1a D不在他家里 xff09 如果我们给A的事情增加修饰符 xff1a 1 public事件 xff1a 地球人都
  • 动手写代码之前必须的准备工作-1.5.第1季第5部分-朱有鹏-专题视频课程

    动手写代码之前必须的准备工作 1 5 第1季第5部分 2423人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第1季第5个课程 xff0c 主要内容是开发环境的搭建 C语言基础知识 数据手册的带读等编程前导知识 学习本课程的
  • Ubuntu:gcc编译报错 fatal error: stdio.h 没有那个文件或目录解决方法

    跟着火哥学习liunx xff0c 在跟着视频学习到第13讲的时候遇到了gcc编译hello c报错的问题 xff0c 也是搞了半天查了很多解决方案都是叫我安装C C 43 43 环境什么的 xff0c 但试了并没有用 xff0c 可能是我
  • 一文教你实现Spring动态启停定时任务

    为什么需要定时任务 定时任务的应用场景十分广泛 xff0c 如定时清理文件 定时生成报表 定时数据同步备份等 Java定时任务的原理 jdk自带的库中 xff0c 有两种技术可以实现定时任务 xff0c 一种是Timer 另一种是 Sche
  • 市面上主流TPMS胎压芯片介绍

    今天的汽车胎压芯片市场是算热闹的 xff0c 相对于2016年时 xff0c 国产 国外的都有了新的变化 xff0c 对产品开发者或者说使用者来说 xff0c 无疑是福音 xff0c 要想国内胎压市场从2005年左右到2016年 xff0c
  • Hbase的安装与配置

    文章目录 Hbase 安装配置一 xff0c 测试Hadoop 安装1 xff0c ssh 免密测试2 xff0c jps 查看进程 二 xff0c 安装Hbase1 xff0c 拷贝Hbase 2 5 0 到 opt 目录下 三 xff0
  • Python 数据可视化的三大步骤

    1 首先 xff0c 要知道我们用哪些库来画图 matplotlib Python中最基本的作图库就是matplotlib xff0c 是一个最基础的Python可视化库 xff0c 一般都是从matplotlib上手Python数据可视化
  • 本文一步一步地教你如何将Python程序打包成exe文件—赶紧进来学习吧

    先来看看几个问题 一 什么是exe可执行文件 xff1f exe文件英文全名是executable file xff0c 翻译为可执行文件 xff08 但它不等于可执行文件 xff09 xff0c 可执行文件包含两种 xff0c 文件扩展名
  • 用python代码画爱心,来自程序猿的浪漫

    不相信python代码可以画爱心 xff1f 先来一张效果图来看看效果吧 xff01 用python代码画爱心的思路是怎样的 xff1f 1 怎么画心形曲线 2 怎么填满心形曲线 3 怎么用 python 画出爱心 接下来看好了 xff0c
  • 从协方差的角度详解线性判别分析原理+Python实现

    目录 写在前面 机器学习强基计划聚焦深度和广度 xff0c 加深对机器学习模型的理解与应用 深 在详细推导算法模型背后的数学原理 xff1b 广 在分析多个机器学习模型 xff1a 决策树 支持向量机 贝叶斯与马尔科夫决策 强化学习等 1
  • Python量化交易实战:获取股票数据并做分析处理

    量化交易 xff08 也称自动化交易 xff09 是一种应用数学模型帮助投资者进行判断 xff0c 并且根据计算机程序发送的指令进行交易的投资方式 xff0c 它极大地减少了投资者情绪波动的影响 量化交易的主要优势如下 xff1a 快速检测
  • Python读取xml文件

    关于python读取xml文章很多 xff0c 但大多文章都是贴一个xml文件 xff0c 然后再贴个处理文件的代码 这样并不利于初学者的学习 xff0c 希望这篇文章可以更通俗易懂的教如何使用python 来读取xml 文件 什么是xml