Python使用xml.dom解析xml

先复习一下xml概念:

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准

解析工具:

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

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

目录层次:

collect shelf
    movie title
          xxxx
          xxxx

在这里插入图片描述

Python解析代码

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from xml.dom.minidom import parse
import xml.dom.minidom

#使用Minidom解析器打开xml文档
DOMTree = xml.dom.minidom.parse("mov.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
    print("Root element : %s " % collection.getAttribute("shelf"))

#self.getElementsByTagName("xx")取下级
#在集合里面获取所有电影
movies = collection.getElementsByTagName("movie")

#打印每部电影的详细信息
for movie in movies:
    print("********movies*********")
    if movie.hasAttribute("title"):
        print("title : %s" % movie.getAttribute("title"))

    type = movie.getElementsByTagName("type")[0]
    print("type : %s" % type.childNodes[0].data)

    format = movie.getElementsByTagName("format")[0]
    print("Format : %s" % format.childNodes[0].data)
    
    #有些电影里不一定有year这条信息,用if语句不会导致报错
    if movie.getElementsByTagName("year"):
        year = movie.getElementsByTagName("year")[0]
        print("year : %s" % year.childNodes[0].data)

    if movie.getElementsByTagName("episodes"):
        episodes = movie.getElementsByTagName("episodes")[0]
        print("episodes : %s" % episodes.childNodes[0].data)

    rating = movie.getElementsByTagName("rating")[0]
    print("rating : %s" % rating.childNodes[0].data)

    stars = movie.getElementsByTagName("stars")[0]
    print("stars : %s" % stars.childNodes[0].data)

    description = movie.getElementsByTagName("description")[0]
    print("description : %s" % description.childNodes[0].data)

输出结果:

Root element : New Arrivals 
********movies*********
title : Enemy Behind
type : War, Thriller
Format : DVD
year : 2003
rating : PG
stars : 10
description : Talk about a US-Japan war
********movies*********
title : Transformers
type : Anime, Science Fiction
Format : DVD
year : 1989
rating : R
stars : 8
description : A schientific fiction
********movies*********
title : Trigun
type : Anime, Action
Format : DVD
episodes : 4
rating : PG
stars : 10
description : Vash the Stampede!
********movies*********
title : Ishtar
type : Comedy
Format : VHS
rating : PG
stars : 2
description : Viewable boredom
posted @   I'm_江河湖海  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示