zoukankan      html  css  js  c++  java
  • 【Python】xml 解析

    1、 XML:指可扩展标记语言,是一种标记语言,用于存储数据和传输数据,但没有像HTML那样具有预定义标签,需要程序猿自定义标签

    2、 XML的解析:读取XML数据结构中的某些信息,比如读取书的属性

    3、 XML注释格式为:

    <!—注释内容-->

    4、 CDATA指不应由XML解析器进行解析的文本数据

    <![CDATA[“我自己的代码”]]>

    5、 Python解析XML的是三种方法

    (1) SAX 逐行解析

    (2) DOM 对象,一次性读取全部,将内存存储到内存中,将XML存成一棵树

    (3) ElementTree

    6、 Doc.toxml() 获取xml文档函数,也就是文档内容

    7、 xml.dom解析xml常用api

    Minidom.parse: 该函数的作用是使用parse解析器打开xml文档,并将其解析为DOM文档,也就是内存中的一棵树,并得到这个DOM对象。

     
     

    8、 node.hasAttribute()判断属性在不在

    9、 node.hasAttribute()获取节点的某个属性值

    10、 doc.documentElement获取xml文档对象,就是拿到DOM树的根

    11、 node.getElementsByTagName(name)获取XML文档中某个父节点下具有相同节点名的节点对象集合,是一个list对象。

    12、 hasChildNodes()判断是否存在叶子结点

     

    13、 node.childNodes返回节点node下所有子节点组成的list

     

    节点:0,2,4,6是回车文本节点;1,3,5是标签节点

     
     

     
    #练习:自定义一个xml文件,包含数据库的ip地址,用户名、密码和数据库名称,将它从xml中读取出来,放到一个List里面
    from xml.dom.minidom import parse
     
    domtree=parse("e:ip.xml")
     
    treelist=domtree.documentElement
    ipaddress=treelist.getElementsByTagName("ip")
     
    lst=[]
    for i in range(1,6,2):
        tag_name=ipaddress[0].childNodes[i].tagName
        tag_content=ipaddress[0].childNodes[i].childNodes[0].data
        lst.append(tag_name+":"+tag_content)
    print lst
    for i in lst:
        print i
     
     
    #练习:xml解析
    #从xml.dom.minidom模块引入解析器parse
    from xml.dom.minidom import parse
     
    #minidom解析器打开xml文档并将其解析为内存中的一棵树
    DOMTree = parse(r"e: est.xml")
    print type(DOMTree) #instance对象
     
    #获取xml文档对象,就是拿到树的根
    booklist = DOMTree.documentElement  #DOM对象
    print u"DOM树的根对象:",booklist
     
    if booklist.hasAttribute("type") :
      #判断根节点booklist是否有type属性
      print u"booklist元素存在type属性"
    else :
      print u"booklist元素不存在type属性"
     
    if booklist.hasAttribute("type") :
       #判断根节点booklist是否有type属性,有则获取并打印属性的值
      print "Root element is", booklist.getAttribute("type")
    print type(booklist.getAttribute("type"))
     
    print u"xml文档内容: %s" %DOMTree.toxml()
     
    #获取booklist对象中所有book节点的list集合
    books = booklist.getElementsByTagName("book")
    print type(books)
    print books
     
    print "*"*30
     
    #获取booklist对象中所有author节点的list集合
    author=booklist.getElementsByTagName("author")
    print author
     
    print "*"*30
     
    #获取所有子节点
    print books[0].childNodes
     
    print "*"*30
     
    #获取节点名称和文本放到一个字典中
    d={}
    for i in range(1,6,2):
        tag_name =  books[1].childNodes[i].tagName
        d[tag_name] = books[1].childNodes[i].childNodes[0].data
    print d
     
    for k,v in d.items():
        print k,v
     
    print "*"*30
     
    books = booklist.getElementsByTagName("book")
    print u"book节点的个数:", books.length
    print books[0]
    if books[0].hasChildNodes():
      print u"存在叶子节点 ", books[0].childNodes
    else :
      print u"不存在叶子节点"
     
    print "*"*30
     
    #练习:xml解析
    from xml.dom.minidom import parse
    import xml.dom.minidom
    # 使用minidom解析器打开 XML 文档
    DOMTree = xml.dom.minidom.parse(r"e:\movie.xml")
    collection = DOMTree.documentElement
    if collection.hasAttribute("shelf"):
       print "Root element : %s" % collection.getAttribute("shelf")
    # 在集合中获取所有电影
    movies = collection.getElementsByTagName("movie")
    # 打印每部电影的详细信息
    for movie in movies:
        print "*****Movie*****"
        if movie.hasAttribute("title"):
            print "Title: %s" % movie.getAttribute("title")
     
        type = movie.getElementsByTagName('type')[0] #[0]表示第一个title标签,因为一个<book>...</book>之间可能会
                                                     #定义多个title标签
        print "Type: %s" % type.childNodes[0].data
     
        format = movie.getElementsByTagName('format')[0]
        print "Format: %s" % format.childNodes[0].data
     
        rating = movie.getElementsByTagName('rating')[0]
        print "Rating: %s" % rating.childNodes[0].data
     
        description = movie.getElementsByTagName('description')[0]
        print "Description: %s" % description.childNodes[0].data
  • 相关阅读:
    汉字的几何中心
    输入带空格的string类型字符串 c++
    cin函数返回值
    win7玩游戏两边有黑条
    unresolved external symbol __imp__WSACleanup@0
    sizeof和strlen
    printf 函数返回值
    clone() 操作系统实验
    unsigned char 与 char
    【转】向字符数组输入空格的方法
  • 原文地址:https://www.cnblogs.com/jingsheng99/p/8666693.html
Copyright © 2011-2022 走看看