1,xml的文档结构

1.1,XML文档包括XML头信息和XML信息体

1.1.1,XML文档头信息

它表明了此XML文档所用的版本,编码方式。有些复杂的还有一些文档类型的定义(DOCTYPE),用于定义此XML文档所用的DTD或Schema和一些实体的定义。

1.1.2,XML文档信息体

tbl_test

This ia a test table

XML信息体是由树状元素组成。每个XML文档都有一个文档元素,也就是树的根元素,所有其它的元素和内容都包含在根元素中。

DOM是Document Object Model的简称,它是以对象树来表示一个XML文档的方法,使用它的好处就是你可以非常灵活的在对象中进行遍历。

2,minidom模块读取XML

按照我的理解,在获得XML文档树的根节点后,实际上分为两种节点【这里测试只用到这两种节点,实际按照nodeType知道还有其他很多】:元素节点(ELEMENT NODE)和文本节点(TEXT NODE)。元素节点如上面的Name标签,整个就是一个元素节点。文本节点如上面的tbl_test,也作为一个节点,即文本节点。

节点都具有这样三种属性;

node.nodeName

nodeName为结点名字

node.nodeValue

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

node.nodeType

nodeType是结点的类型

元素节点(ELEMENT NODE)可以用root.getElementsByTagName("Table")这样来获取以Table标签的一个列表。

文本节点(TEXT NODE)         可以用column.getAttribute('Name')这样来获取Name的这样一个属性值。属性指的是: 这样的结构。可以使用node.data或者node.nodeValue来获取文本值。

2.1,得到dom对象

从xml文件得到dom对象

>>> import xml.dom.minidom

>>> dom = xml.dom.minidom.parse('d:/catalog.xml')

从xml字符串得到dom对象

>>> import xml.dom.minidom

>>> dom = xml.dom.minidom.parseString(xmlstring)

2.2,得到文档元素对象

>>> root = dom.documentElement

3,测试

3.1,实验1

tbl_test

This ia a test table

dom = parseString(string1)

#root = dom.documentElement

table  =  dom.getElementsByTagName( "Table" )[0]

name  =  table.getElementsByTagName( "Name" )[0]

for textNode in name.childNodes:

print textNode.data

print textNode.nodeValue

1,dom获得的是整个xml对象

2,【未运行】root获得的整个文档对象,如果执行了,实际上得到的是根节点唯一的标签

下的东西,如果有多个,估计会忽略,默认把第一个当成根。

3,root.getElementsByTagName( "Table" )将获得所有

标签对,这是一个类似于列表的东西,可以用列表方法获取。因为这里就一个标签,所以直接[0]返回这个单独的对象。

4,table获得的是真正的单个的其中的

对象。

5,table.getElementsByTagName( "Name" )同样获得的是一个[,...,]这样的列表。

6,name获得的是单个的现在仅有的对象。

7,由于name下面是文本节点tbl_test。虽然只有一个,但可以有多个。此时,前述的都是元素节点,Name标签下都是文本节点了,可以用name.childNodes获得文本节点列表,注意,还是列表。

8,textNode是其中的唯一的一个tbl_test。

9,因为是文本节点,所有有data属性。当然其,node.nodeValue也可以读到。

3.2,实验2

dom = parseString(string2)

#root = dom.documentElement

partitions = dom.getElementsByTagName("Partitions")[0]

partition = partitions.getElementsByTagName("Partition")[0]

column = partition.getElementsByTagName("Column")[0]

print column.getAttribute('Name')

1,dom获得的是整个xml对象

2,【未运行】root获得的整个文档对象,如果执行了,实际上得到的是根节点唯一的标签

下的东西,如果有多个,估计会忽略,默认把第一个当成根。

3,root.getElementsByTagName( "Partitions" )将获得所有标签对,这是一个类似于列表的东西,可以用列表方法获取。因为这里就一个标签,所以直接[0]返回这个单独的对象。

4,partitions获得的是真正的单个的其中的对象。

5,partitions.getElementsByTagName( "Partition" )同样获得的是一个[,...,]这样的列表。

6,partition获得的是单个的现在仅有的对象。

7,column以同样方式获取到单个的对象

8,由于Name是Column的一个属性,所以用column.getAttribute('Name')来获取这个属性值

3.3,实验3

string1='''<?xml  version="1.0" encoding="UTF-8"?>

tbl_test

gexing

This ia a test table

dandan

'''

dom = parseString(string1)

root = dom.documentElement

names = root.getElementsByTagName("Name")

for name in names:

for child in name.childNodes:

print child.nodeValue

输出:

[admin@r42h06016.xy2.aliyun.com]$python test.py

tbl_test

gexing

dandan

注意点1,空行是因为实际上要的xml是无空格的内容。

注意点2,说明用getElementsByTagName得到的list是遍历所有“节点”,然后不管哪个层次,遇到一个符合的就会加进来。如果没有文本信息,就输出None。

3.4,简单函数

对于简单的元素,如:

Python,我们可以编写这样一个函数来得到它的内容(这里为Python)。

def getTagText(root, tag):

node = root.getElementsByTagName(tag)[0]

rc = ""

for node in node.childNodes:

if node.nodeType in ( node.TEXT_NODE, node.CDATA_SECTION_NODE):

rc = rc + node.data

return rc

4,xml.etree.ElementTree模块读xml

import xml.etree.ElementTree

content = xml.etree.ElementTree.fromstring(string1)

name = content.findall('Name')#找到所有的Name的列表

name = content.findtext('Name')#找到下一层的Name节点

python解析xml文件选用模块_python-minidom模块【解析xml】相关推荐

  1. python解析xml文件选用模块_Python标准库系列之xml模块

    Python's interfaces for processing XML are grouped in the xml package. 带分隔符的文件仅有两维的数据:行和列.如果你想在程序之间交 ...

  2. python中xml模块_python常用模块之xml模块

    使用xml模块需先引入模块名: #! /usr/bin/env python # -*- coding:utf-8 -*- import xml.etree.ElementTree as ET #ET ...

  3. 【Groovy】Xml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件中的节点和属性 | 获取 Xml 文件中的节点属性 )

    文章目录 一.创建 XmlParser 解析器 二.获取 Xml 文件中的节点 三.获取 Xml 文件中的节点属性 四.完整代码示例 一.创建 XmlParser 解析器 创建 XmlParser 解 ...

  4. Android -- 创建XML文件对象及其序列化, pull解析XML文件

    1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /*** 短信的业务bean* @author Administrator ...

  5. java解析xml文件的几种方式(DOM解析)

    好久不用的东西,今天居然被面试官问到了.那既然这样,我们就一起回顾下java解析xml文件的几种方式吧. DOM解析 dom解析所需依赖是我们jdk自带的,所以只需要使用jdk为我们提供的接口即可上手 ...

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

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

  7. python argparse模块_Python argparse模块应用实例解析

    这篇文章主要介绍了Python argparse模块应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 argparse是python ...

  8. 用python可以处理xml文件怎么打开_Python大神都是这样处理xml文件的!

    最近有同学询问如何利用 Python 处理 xml 文件,特此整理一个比较简洁的操作手册,供大家参阅. 首先准备一个xml文件,xml中的内容如下所示.存储为:student.xml 如果要获取这个x ...

  9. python文件操作和模块_Python(五)--模块与文件操作

    Python(五)–模块与文件操作 模块和包 模块 模块是包含Python定义和语句的文件,把一组相关函数或代码组织到一个文件中,一个文件即一个模块.模块的文件名 = 模块名+后缀.py 模块之间代码 ...

最新文章

  1. html十秒倒计时跳转,javascript实现倒计时跳转页面
  2. 计算机版本号怎么看,怎样查看电脑版本型号,怎样查看电脑版本信息
  3. MySql的优化步骤
  4. 2011计算机2级,全国计算机等级考试四合一过关训练:2级C语言程序设计(2011版)...
  5. Asp.net Core Jenkins Docker 实现一键化部署
  6. 再有人问你volatile是什么,把这篇文章也发给他(深入分析)
  7. java怎么处理ajax请求,java怎么用ajax请求?jquery ajax请求后台的简单例子
  8. 【Python】模块学习之ConfigParser读写配置信息
  9. 释放虚拟GPU力量 NVIDIA 加速企业远程办公生产力变革
  10. linux mysql 目录结构图_linux下mysql安装、目录结构、配置
  11. css倒序循环,不借助后台和 JS ,只用 CSS 让一个列表编号倒序
  12. java迭代器_74.Java迭代器
  13. C#中的多线程 - 基础知识 z
  14. Java性能优化(详解)
  15. 微信网页第三方登陆 获取用户信息 代码
  16. Flash Platform 游戏开发入门
  17. 利用EXCEL批量重命名文件
  18. 物联网外设学习笔记-摄像头(一)
  19. element整理<el-calendar>日历组件-假期(整理)
  20. [M1]Daily Scum 10.11

热门文章

  1. Camstasia studio渲染(生成)视频
  2. 跳出数据计算拯救人工智能之分布式逻辑
  3. 关于path.join,path.resolve的详细介绍
  4. redis链表link命令
  5. 遍历jenkins build后的文件夹,找出最新“build NO.”复制到制定目录进行操作
  6. Alt + sysrq + REISUB doesn't reboot my laptop
  7. python取列表中最接近某值的元素及索引
  8. Kaggle心得(一)
  9. 通过Spark listener实现Direct模式读取Kafaka数据
  10. 解决 WordPress“正在执行例行维护,请一分钟后回来”