python解析xml并按照其结构输出

平时写代码需要将一个xml文件按照其结构,将每个节点列出来,如:

<root>
 <person age="18">
    <name>hzj</name>
    <sex>man</sex>
 </person>
 <person age="19" des="hello">
    <name>kiki</name>
    <sex>female</sex>
 </person>
</root>

就需要这样表示:

{"root"};{"root","person"};{"root","person","name"};{"root","person","sex"}.....将所有节点这样写出来,为了图简单,直接写了一个脚本解析了下.

python有三种方法解析XML,SAX,DOM,以及ElementTree

1.SAX (simple API for XML )

pyhton 标准库包含SAX解析器,SAX是一种典型的极为快速的工具,在解析XML时,不会占用大量内存。

但是这是基于回调机制的,因此在某些数据中,它会调用某些方法进行传递。这意味着必须为数据指定句柄,

以维持自己的状态,这是非常困难的。

2.DOM(Document Object Model)

与SAX比较,DOM典型的缺点是比较慢,消耗更多的内存,因为DOM会将整个XML数读入内存中,并为树

中的第一个节点建立一个对象。使用DOM的好处是你不需要对状态进行追踪,因为每一个节点都知道谁是它的

父节点,谁是子节点。但是DOM用起来有些麻烦。

3.ElementTree(元素树)

ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少,这里主要

介绍ElementTree。

下面代码用的是第三种方法:

#-*- coding: UTF-8 -*-
#-----------------------------------
#   python2.7
#   author:loster
#   version:0.1
#   description:解析xml
#-------------------------------------
import  xml.etree.ElementTree as ET

def getXml(fileName):
    root = ET.parse(fileName).getroot() #获得根节点
    resultList = []
    walkXml(root,resultList,'')
    return resultList

def walkXml(root,resultList,tempLists):
    #if tempLists == 'root':
    #    tempLists = ""
    tempList = tempLists+',"'+root.tag+'"'
    resultList.append(tempList)
    children_node = root.getchildren()
    if len(children_node) == 0:
        return
    for child in children_node:
        walkXml(child,resultList,tempList)
    return

if __name__ == "__main__":
    file_name = "test.xml"
    R = getXml(file_name)
    for r in R:
        print "{"+r[1:]+"}"

结果:

时间: 2024-10-30 09:48:51

python解析xml并按照其结构输出的相关文章

python解析xml之lxml

虽然python解析xml的库很多,但是,由于lxml在底层是用C语言实现的,所以lxml在速度上有明显优势.除了速度上的优势,lxml在使用方面,易用性也非常好.这里将以下面的xml数据为例,介绍lxml的简单使用. [html]?view plain?copy ? 例子:dblp.xml(dblp数据的片段)?? <?xml?version='1.0'?encoding='utf-8'?>???? <dblp>?? ???????<article?mdate="

python解析xml文件操作的例子

python解析xml文件操作实例,操作XML文件的常见技巧. xml文件内容: <?xml version="1.0" ?> <!--Simple xml document__chapter 8--> <book> <title> sample xml thing </title> <author> <name> <first> ma </first> <last>

python 解析XML文件

比较高效的python 解析XML文件 参考 http://codingpy.com/article/parsing-xml-using-python/ try: import xml.etree.cElementTree as ET except ImportError: import xml.etree.ElementTree as ET import time def parse_poi_by_elementTree(filepath): t0 = time.time() tree = E

Python解析XML文件

python对XML的解析 常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同. python有三种方法解析XML,SAX,DOM,以及ElementTree: 1.SAX (simple API for XML ) pyhton 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件. 2.DOM(Document Object Model) 将XML数据在内存中解析成一个树,通过

Python解析xml文件遇到的编码解析的问题

使用python对xml文件进行解析的时候,如果xml文件的头文件是utf-8格式的编码,那么解析是ok的,但如果是其他格式将会出现如下异常: xml.parsers.expat.ExpatError: unknown encoding 因此,为了保证程序的正常运行,我们需要对读取的文件进行编码处理. 1.首先将读取的字符从原来的编码解析,并编码成utf-8: 2.修改xml的encoding: 代码如下: import sys import os import datetime import

python解析XML笔记(etree)

近期梳理Weblogic数据源,数据源较多,但是每一个数据源在weblogic中是xml方式存在,所以想到批量解析xml,把数据放到数据库后来解决. 需要的数据源信息: WEBLOGIC_HOSTJDBC_NAMEJNDI_NAMEDB_ALIASDB_NAMEDB_HOSTINST_PORTDB_USERTARGETURLDRIVER_TYPECAPACITY 数据源xml格式: <?xml version='1.0' encoding='UTF-8'?> <jdbc-data-sou

python 解析XML xml.dom

一 .xml.dom 解析XML的API描述 minidom.parse(filename) 加载读取XML文件 doc.documentElement 获取XML文档对象 node.getAttribute(AttributeName) 获取XML节点属性值 node.getElementsByTagName(TagName) 获取XML节点对象集合 node.childNodes 返回子节点列表. node.childNodes[index].nodeValue 获取XML节点值 node.

python 解析 xml

<taskList nextId="62292"> <task module="reliability" owner="vprovodi" id="59074" status="error" result="XFL is OK;init OK;Tests: 17, Expected failures: 1, Unexpected: 1, Actual total count is

python解析xml

import xml.dom.minidom as minidom dom = minidom.parse("aa.xml") root = dom.getElementsByTagName("Schools") #The function getElementsByTagName returns NodeList. print(root.length) for node in root: print("Root element is %s."