在阅读之前,你需要了解一些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文档_完整版_博主推荐的更多相关文章

  1. python优秀库 - 使用xmltodict解析xml文档

    上次讲到如何使用BeautifulSoup解析XML文档,今天发现另外一个python库xmltodict(https://github.com/martinblech/xmltodict)也很简单. ...

  2. Objective-C ,ios,iphone开发基础:使用GDataXML解析XML文档,(libxml/tree.h not found 错误解决方案)

    使用GDataXML解析XML文档 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用第三方的库,原因是解析效率更高.使用上更方便 这里主要介绍一下 ...

  3. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  4. 浅谈用java解析xml文档(四)

    继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使 ...

  5. 浅谈用java解析xml文档(二)

    上一文中总结了dom解析xml文档的方式,本文开始总结使用SAX解析xml 的方式及它的优缺点! SAX(Simple API for XML),是指一种接口,或者一个软件包. 首先我们应该知道SAX ...

  6. DOM4J解析XML文档

    Tip:DOM4J解析XML文档 Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM的人分离出来而后独立开发的.与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j ...

  7. dom4j解析xml文档全面介绍

    一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...

  8. 四种生成和解析XML文档的方法详解

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  9. Java高级特性 第14节 解析XML文档(2) - SAX 技术

    一.SAX解析XML文档 SAX的全称是Simple APIs for XML,也即XML简单应用程序接口.与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式.当使用S ...

随机推荐

  1. linux强制踢掉登录用户【转】

    [root@Wang ~]# w :: up :, users, load average: 0.71, 0.58, 0.57 USER TTY FROM LOGIN@ IDLE JCPU PCPU ...

  2. Flask:文件配置方式实践及其中的各种问题记录

    Windows 10家庭中文版,Python 3.6.4,Flask 1.0.2, 提示: 1.请查看本文后面的“18-07-17  11:18重大纠正” ! 2.flask run命令运行时传入参数 ...

  3. 美国部分科技公司创始及IPO信息

    作者:Ben.Z 时间:2018-04-19 做这份统计表格的目的是为了更好地了解当下美国的IT发展,搞清楚那些耳熟能详的名词的来源. 原文是用WPS统计的,本文仅展示截图. 创始人年龄分析: 1.上 ...

  4. java基础37 集合框架工具类Collections和数组操作工具类Arrays

    一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...

  5. Centos简介

    Centos作为主流的一种Linux操作系统,以后项目中,比如后期Redis,以及部署一些项目,会把Centos作为服务器操作系统,我们选用Centos,主要是免费,以及稳定. Centos详细介绍, ...

  6. (三)Rest风格的资源URL

    第一节:Restful风格的资源URL简介 第二节:SpringMVC对Rest风格的支持 第三节:@PathVariable获取Url变量 第四节:SpringMVC对静态资源的处理 http:// ...

  7. sql 修改列名及表名 sp_rename

    因需求变更要改表的列名,平常都是跑到Enterprise manager中选取服务器->数据库->表,然后修改表,这样太麻烦了,查了一下,可以用script搞定, 代码如下: EXEC s ...

  8. vector 测试

    vector 测试 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { backg ...

  9. php取得当前时间函数

    php取得当前时间函数文章提供了php的几种获取当前时间的函数,date,time等哦,同时告诉我如何解决时区问题哦. php获取当前时间 使用函式 date() 实现 <?php echo $ ...

  10. day6 subprocess模块、logging模块

        logging模块 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储 ...