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’

Node.ELEMENT_NODE == 1

Node.ATTRIBUTE_NODE == 2

Node.TEXT_NODE == 3

Node.CDATA_SECTION_NODE == 4

Node.ENTITY_REFERENCE_NODE == 5

Node.ENTITY_NODE == 6

Node.PROCESSING_INSTRUCTION_NODE == 7

Node.COMMENT_NODE == 8

Node.DOCUMENT_NODE == 9

Node.DOCUMENT_TYPE_NODE == 10

Node.DOCUMENT_FRAGMENT_NODE == 11

Node.NOTATION_NODE == 12

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文件相关推荐

  1. c语言 自己编程解析 xml,C语言解析.XML文件

    最近手头上有个活在忙,中间很重要的一部分就是用C语言将.XML文件中想要的key和value读出来,与之前已有的值进行比较. 核心的.XML文件的格式如下: zzz xxx yyy 而我的思路是这样的 ...

  2. python解析xml文件选用模块_python语言解析xml文件的常用的有两种方式

    MiniDom方式解析xml xml文件以data.xml为例,具体操作如下: data.xml: 保存用户的信息 Jordy 12345678 20 男 上网 功夫 34443678 18 男 功夫 ...

  3. Python ElementTree 解析 xml文件

    文章目录 一.xml文件结构 二.基础解析 1.加载文档 2.获取根元素 3.根元素的属性 4.遍历其直接子元素 5.通过索引值来访问特定的子元素 查找需要的元素 三.支持通过XPath查找元素 四. ...

  4. 使用python批量解析xml文件并且预处理成json的格式

    基本 文件的xml的格式如下: <?xml version="1.0" encoding="GB2312" ?> <Body><T ...

  5. python读取xml标注坐标_遍历文件 创建XML对象 方法 python解析XML文件 提取坐标计存入文件...

    XML文件??? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 里面的标签都是可以随心所欲的按照他的命名规则来定义的,文件名为roi.xm ...

  6. python解析xml数据_数据开发_Python解析XML文件

    解析XML文件 XML是可扩展标记语言,主要用于传输和存储数据 解析方式 使用lxml解析 主要注意: text tag attrib 使用方式 有 get() 以及迭代的情况 数据示例 a31 代码 ...

  7. python解析xml文件最好选用的模块_python高级编程 之解析XML文件模块

    XML是啥?可扩展标记语言(extensible  makeup language),以.xml为后缀的文件. XML文件最大的作用在于存储和传输数据.很多Python的项目就是把产品相关配置参数存储 ...

  8. python中利用lxml模块解析xml文件报错XMLSyntaxError: Opening and ending tag mismatch

    今天在代码中第一次使用lxml解析xml文件时出错了, XMLSyntaxError: Opening and ending tag mismatch: keyEffectiveDate line 2 ...

  9. python使用ElementTree解析XML文件

    一.将XML网页保存到本地 要加载XML文件首先应该将网页上的信息提取出来,保存为本地XML文件.抓取网页信息可以python的urllib模块. 代码如下: from urllib import u ...

最新文章

  1. 27 个为什么,帮助你更好的理解Python
  2. extjs中文字体在firefox和Adobe Air里显示偏小的问题
  3. Java多线程系列--“JUC原子类”03之 AtomicLongArray原子类
  4. CDT源代码框架分析改造 线程对象的改造 添加标签 区分断点跟跟踪点
  5. 区块链中的数学 - EdDSA签名机制
  6. C++文本操作.Vs.Python
  7. [html] 简述下html5的离线储存原理,同时说明如何使用?
  8. IDEA常用快捷键【win-mac对比】
  9. Redis常见面试题与答案
  10. linux testlink安装,Linux下安装testlink
  11. (6)Linux进程调度-实时调度器
  12. JavaSE-22 反射
  13. 使用思维导图提高工作效率的秘诀:6种工作思维导图模板分享
  14. 程序员面试智力题总结
  15. Android keeps stopping
  16. EGE示例程序——花火闪烁的夜晚
  17. 惊闻家乡的学校要撤销
  18. 处理射手网字幕,方便打印
  19. 越是穷人,就越需要大数据
  20. python实现视频剪辑_MoviePy常用剪辑类及Python视频剪辑自动化

热门文章

  1. HttpServletRequest 需要导入xx包?
  2. 2016/03/30
  3. 今天加班做了昨天晚上要写的页面,用到了一些之前用过但还不熟悉需要上网搜索才能用的知识点:...
  4. 第1章 网站与网站的建设过程
  5. ogg sqlserver2012 抽取不到日志_ogg抽取进程与数据字典的关系
  6. 【论文写作】招聘系统总体流程图如何画
  7. c++builder 6 转成vs_官方:欧洲杯将在2021年6月11日至7月11日进行,举办城市不变...
  8. css修饰页面怎么制作,【转载】CSS修饰图片
  9. hashmap put过程_HashMap为什么线程不安全?
  10. c++ 返回引用_【Excel必知必会】引用(链接)小专题