什么是DOM?

文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。

一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。

优点:操作简单,容易理解

缺点:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存

movies.xml:需要解析的xml文件如下:

<collection shelf="New Arrivals">
<movie title="Enemy Behind">
<type>War, Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>10</stars>
<description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
<type>Anime, Science Fiction</type>
<format>DVD</format>
<year>1989</year>
<rating>R</rating>
<stars>8</stars>
<description>A schientific fiction</description>
</movie>
<movie title="Trigun">
<type>Anime, Action</type>
<format>DVD</format>
<episodes>4</episodes>
<rating>PG</rating>
<stars>10</stars>
<description>Vash the Stampede!</description>
</movie>
<movie title="Ishtar">
<type>Comedy</type>
<format>VHS</format>
<rating>PG</rating>
<stars>2</stars>
<description>Viewable boredom</description>
</movie>
</collection>

xmltest.py:解析movies.xml文件的python代码如下:

# -*- coding:UTF-8 -*-

'''
Created on 2015年9月10日 @author: xiaowenhui
''' from xml.dom.minidom import parse
import xml.dom.minidom #第一种方法,DOM解析 #使用minidom解析器打开xml文档
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement #在集合中获取所有电影
movies = collection.getElementsByTagName("movie") #打印每部电影的详细信息
dict_movies = {} for movie in movies:
dict_movie = {}
title = ""
print "*****Movie*****"
if movie.hasAttribute("title"): #具有属性
print "Title:%s" % movie.getAttribute("title") #获取属性值
title = movie.getAttribute("title") try:
type = movie.getElementsByTagName("type")[0]
print "Type :%s" % type.childNodes[0].data
dict_movie["type"] = type.childNodes[0].data format = movie.getElementsByTagName("format")[0] #获取该标签下的第一个子节点
print "format:%s" % format.childNodes[0].data
dict_movie["format"] = format.childNodes[0].data try:
year = movie.getElementsByTagName("year")[0]
print "year :%s" % year.childNodes[0].data
dict_movie["year"] = year.childNodes[0].data
except:
pass try:
episodes = movie.getElementsByTagName("episodes")[0]
print "episodes:%s" % episodes.childNodes[0].data
dict_movie["episodes"] = episodes.childNodes[0].data
except:
pass rating = movie.getElementsByTagName('rating')[0]
print "Rating: %s" % rating.childNodes[0].data
dict_movie["rating"] = rating.childNodes[0].data stars = movie.getElementsByTagName('stars')[0]
print "stars: %s" % stars.childNodes[0].data
dict_movie["stars"] = stars.childNodes[0].data description = movie.getElementsByTagName('description')[0]
print "Description: %s" % description.childNodes[0].data
dict_movie["description"] = description.childNodes[0].data
except:
print "error:" + title + "\n"
continue dict_movies[title] = dict_movie print dict_movies

解析后的输出结果如下:

*****Movie*****
Title:Enemy Behind
Type :War, Thriller
format:DVD
year :2003
Rating: PG
stars: 10
Description: Talk about a US-Japan war
*****Movie*****
Title:Transformers
Type :Anime, Science Fiction
format:DVD
year :1989
Rating: R
stars: 8
Description: A schientific fiction
*****Movie*****
Title:Trigun
Type :Anime, Action
format:DVD
episodes:4
Rating: PG
stars: 10
Description: Vash the Stampede!
*****Movie*****
Title:Ishtar
Type :Comedy
format:VHS
Rating: PG
stars: 2
Description: Viewable boredom
{u'Transformers': {'rating': u'R', 'description': u'A schientific fiction', 'format': u'DVD', 'stars': u'', 'year': u'', 'type': u'Anime, Science Fiction'}, u'Ishtar': {'rating': u'PG', 'type': u'Comedy', 'description': u'Viewable boredom', 'stars': u'', 'format': u'VHS'}, u'Enemy Behind': {'rating': u'PG', 'description': u'Talk about a US-Japan war', 'format': u'DVD', 'stars': u'', 'year': u'', 'type': u'War, Thriller'}, u'Trigun': {'rating': u'PG', 'description': u'Vash the Stampede!', 'format': u'DVD', 'episodes': u'', 'stars': u'', 'type': u'Anime, Action'}}

Python—使用xm.dom解析xml文件的更多相关文章

  1. 使用DOM解析xml文件

    使用DOM解析xml文件 要解析的xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <Langu ...

  2. DOM解析XML文件例子

    DOM解析XML文件是一次性将目标文件中的所有节点都读入,然后再进行后续操作的方式. 一般分为以下几步: 1. 定义好目标XML文件路径path . 2. 实例化DOM解析工厂对象 ,Document ...

  3. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  4. 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点

    使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...

  5. DOM解析XML文件实例

    XML文件: response: <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www ...

  6. dom 解析xml文件

    JAXP技术 JAXP即Java Api for Xml Processing该API主要是SUN提供的用于解析XML数据的一整套解决方案,主要包含了DOM和SAX解析技术.大家可以参见SUN的以下两 ...

  7. Qt中使用DOM解析XML文件或者字符串二(实例)

    介绍 在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表.在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档 ...

  8. DOM解析XML文件

    1.首先把第三方代码拖进工程 GDataXMLNode.h和GDataXMLNode.m这两个文件放进工程里面 2.引入libxml2库文件 3.将GDataXMLNode.h文件中的这两个东西在工程 ...

  9. Dom解析XML文件具体用法

    public class Dom4j { public static void main(String[] args) throws Exception { List<Student> l ...

随机推荐

  1. 使用纯 CSS 实现 Google Photos 照片列表布局

    文章太长,因为介绍了如何一步一步进化到最后接近完美的效果的,不想读的同学可以直接跳到最后一个大标题之后看代码.demo及原理就好,或者也可以直接看下面这个链接的源代码. 不过还是建议顺序读下去,因为后 ...

  2. 第二课 TXT读取 - 导出 - 选择顶部/底部记录 - 描述性统计 - 分组/排序

    第2课 创建数据 - 我们从创建自己的数据集开始分析.这可以防止阅读本教程的最终用户为得到下面的结果而不得不下载许多文件.我们将把这个数据集导出到一个文本文件中,这样您就可以获得从文本文件中一些拉取数 ...

  3. Android Drawable之getIntrinsicWidth()和getIntrinsicHeight()

              在Android的开发中,凡是需要画图的地方大都离不开类Drawable.Android的官方文档中介绍这个类就是被设计用来表示可以被画的东西.A Drawable is a ge ...

  4. 移动端布局 rem,和px

    1.rem布局,根据屏幕来计算rem,也就是意义上的适应屏幕,但是一些字体大小转换和计算有些复杂. // rem 布局重定义 (function(){ $('html').css('font-size ...

  5. [转] 利用git钩子,使用python语言获取提交的文件列表

    项目有个需求,需要获取push到远程版本库的文件列表,并对文件进行特定分析.很自然的想到,要利用git钩子来触发一个脚本,实现获取文件列表的功能.比较着急使用该功能,就用python配合一些git命令 ...

  6. Ruby. Vs . Python

    前言:从语言的本质上来分析,我对Ruby持反对态度,毕竟语言是为了交流,在表达的效率层面为了正确性必须适当放弃复杂性.且有句老话说的好,Ruby In Rails 才是语言,而Ruby只是这个语言的工 ...

  7. 如何用npm安装vue

    下载安装node.js,安装完毕做好配置后开始运行. 如果npm版本太低,需要升级一下npm # 查看版本 $ npm -v #升级 npm cnpm install npm -g 安装vue-cli ...

  8. 文件系统VFS数据结构(超级块 inode dentry file)(收集整理)

    Linux虚拟文件系统四大对象: 1)超级块(super block) 2)索引节点(inode) 3)目录项(dentry) 4)文件对象(file) 一个进程在对一个文件进行操作时各种对象的引用过 ...

  9. TensorFlow技术解析与实战学习笔记(13)------Mnist识别和卷积神经网络AlexNet

    一.AlexNet:共8层:5个卷积层(卷积+池化).3个全连接层,输出到softmax层,产生分类. 论文中lrn层推荐的参数:depth_radius = 4,bias = 1.0 , alpha ...

  10. 算法18-----判断是否存在符合条件的元素【list】

    1.题目: 给定一个整数数组,判断其中是否存在两个不同的下标i和j满足:| nums[i] - nums[j] | <= t 并且 | i - j | <= k 2.思路: 来自链接:ht ...