python开发_xml.dom_解析XML文档_完整版_博主推荐
在阅读之前,你需要了解一些xml.dom的一些理论知识,在这里你可以对xml.dom有一定的了解,如果你阅读完之后。
下面是我做的demo
运行效果:

解析的XML文件位置:c:\\test\\hongten.xml
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student no="2009081097">
<name>Hongten</name>
<gender>M</gender>
<age>20</age>
<score subject="math">97</score>
<score subject="chinese">90</score>
</student>
<student no="2009081098">
<name>DuDu</name>
<gender>W</gender>
<age>21</age>
<score subject="math">87</score>
<score subject="chinese">96</score>
</student>
<student no="2009081099">
<name>Sum</name>
<gender>M</gender>
<age>19</age>
<score subject="math">64</score>
<score subject="chinese">98</score>
</student>
</students>
====================================================
代码部分:
====================================================
#python xml.dom #Author : Hongten
#Mailto : hongtenzone@foxmail.com
#Blog : http://www.cnblogs.com/hongten
#QQ : 648719819
#Version : 1.0
#Create : 2013-09-03 import os
from xml.dom import minidom #global var
SHOW_LOG = True
XML_PATH = None def get_dom_by_parse(path):
'''根据XML文件地址解析XML文件,返回dom对象'''
if os.path.exists(path):
if SHOW_LOG:
print('开始解析XML文件:[{}]'.format(path))
return minidom.parse(path)
else:
print('the path [{}] dose not exist!'.format(path)) def get_dom_by_file(path):
'''解析作为文档打开的XML文件'''
if os.path.exists(path):
if SHOW_LOG:
print('开始打开XML文件:[{}]'.format(path))
with open(path) as pf:
if SHOW_LOG:
print('开始解析XML文件:[{}]'.format(path))
return minidom.parse(pf)
else:
print('the path [{}] dose not exist!'.format(path)) def get_dom_by_string(s):
'''解析以字符串形式的XML数据格式'''
if s is not None and s != '':
if SHOW_LOG:
print('开始解析字符串形式的XML数据:[{}]'.format(s))
return minidom.parseString(s)
else:
print('the input string is None or equals \'\'.') def get_root(dom):
'''返回XML文件的根节点'''
if dom is not None:
return dom.documentElement
else:
print('the dom is None!') def get_element_children(fatherElement, subNodeName):
'''根据父节点fatherElement获取子节点subNodeName'''
if fatherElement is not None:
if subNodeName is not None and subNodeName != '':
return fatherElement.getElementsByTagName(subNodeName)
else:
print('the sub node name is None or equals \'\'.')
else:
print('the father node is None!') def get_element_value(element, index=0):
'''获取节点的值'''
if element is not None:
return element.childNodes[index].nodeValue
else:
print('the element is None!') def get_element_attrib_value(element, name):
'''根据节点element的属性名称name获取属性名称的值'''
if element is not None:
if name is not None and name != '':
return element.getAttribute(name)
else:
print('the name is None or equals \'\'.')
else:
print('the element is None!') def get_info(root_children):
'''解析XML内容'''
info = []
for item in root_children:
subs = []
score_value = []
i_no = get_element_attrib_value(item, 'no')
i_name = get_element_children(item, 'name')
i_gender = get_element_children(item, 'gender')
i_age = get_element_children(item, 'age')
i_score = get_element_children(item, 'score')
for sub in i_score:
i_sub = get_element_attrib_value(sub, 'subject')
subs.append(i_sub) v_name = get_element_value(i_name[0])
v_gender = get_element_value(i_gender[0])
v_age = get_element_value(i_age[0])
for s in range(len(i_score)):
score_value.append(s)
v_score = dict(zip(subs, score_value))
info.append(v_name)
info.append(v_gender)
info.append(v_age)
info.append(v_score)
return info def init():
global SHOW_LOG
SHOW_LOG = True
global XML_PATH
XML_PATH = 'C:\\test\\hongten.xml' def main():
init()
dom = get_dom_by_parse(XML_PATH)
root = dom.documentElement
print(root)
root_children = get_element_children(root, 'student')
print(root_children)
info = get_info(root_children)
print(info) if __name__ == '__main__':
main()
python开发_xml.dom_解析XML文档_完整版_博主推荐的更多相关文章
- python优秀库 - 使用xmltodict解析xml文档
上次讲到如何使用BeautifulSoup解析XML文档,今天发现另外一个python库xmltodict(https://github.com/martinblech/xmltodict)也很简单. ...
- Objective-C ,ios,iphone开发基础:使用GDataXML解析XML文档,(libxml/tree.h not found 错误解决方案)
使用GDataXML解析XML文档 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用第三方的库,原因是解析效率更高.使用上更方便 这里主要介绍一下 ...
- 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...
- 浅谈用java解析xml文档(四)
继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使 ...
- 浅谈用java解析xml文档(二)
上一文中总结了dom解析xml文档的方式,本文开始总结使用SAX解析xml 的方式及它的优缺点! SAX(Simple API for XML),是指一种接口,或者一个软件包. 首先我们应该知道SAX ...
- DOM4J解析XML文档
Tip:DOM4J解析XML文档 Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM的人分离出来而后独立开发的.与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j ...
- dom4j解析xml文档全面介绍
一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...
- 四种生成和解析XML文档的方法详解
众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...
- Java高级特性 第14节 解析XML文档(2) - SAX 技术
一.SAX解析XML文档 SAX的全称是Simple APIs for XML,也即XML简单应用程序接口.与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式.当使用S ...
随机推荐
- mysql远程连接数据库
配置mysql允许远程连接的方法. (1)查看3306端口状态 netstat -an | grep 3306 (2)修改mysql配置文件 ubuntu系统:vim /etc/mysql/mysql ...
- MODULE_DEVICE_TABLE【转】
转自:http://blog.csdn.net/tangkegagalikaiwu/article/details/8444249 This pci_device_id structure needs ...
- Serv-U 的升级及数据备份和迁移【转】
Serv-U 配置备份 在serv-u7.x及以上版本安装目录下,有一个文件Serv-U.Archive是serv-u的配置文件,有一个users文件夹是Serv-U的域和用户的信息,那么我们只需 ...
- C# 浅谈 接口(Interface)的作用
继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基类无法实现的 1.接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法 ...
- java使用DOM操作XML
XML DOM简介 XML DOM 是用于获取.更改.添加或删除 XML 元素的标准. XML 文档中的每个成分都是一个节点. DOM 是这样规定的: 整个文档是一个文档节点 每个 XML 标签是一个 ...
- 5 个非常有用的 Laravel Blade 指令,你用过哪些?
接下来我将带大家认识下五个 Laravel Blade 指令,这些指令将让你在解决特定问题时如虎添翼.如果你是刚接触 Laravel 的用户,这些小技巧能带你认识到 Laravel Blade 模板引 ...
- LongAdder类学习笔记
优秀原文 LongAdder | LongAccumulator简介 源码阅读:全方位讲解LongAdder 说到LongAdder,不得不提的就是AtomicLong.AtomicLong是JDK1 ...
- 搜索入门之dfs--经典的迷宫问题解析
今天来谈一下dfs的入门,以前看到的dfs入门,那真的是入门吗,都是把dfs的实现步骤往那一贴,看完是知道dfs的步骤了,但是对于代码实现还是没有概念.今天准备写点自己的心得,真的是字面意思--入门. ...
- Linux 下用 smartd 监测硬盘状况
https://blog.csdn.net/hanxuehen/article/details/6024826
- IIS部署asp.net MVC 出现错误 403.14-Forbidden解决办法
可能性一: <system.webServer> <validationvalidateIntegratedModeConfiguration="false" ...