python 利用lxml 解析xml文件

python 利用lxml 解析xml文件

运行下面程序之前首先保证你的运行环境已经支持python和lxml

如没有安装lxml 文件请参考:http://blog.csdn.net/zhaokuo719/article/details/8209496 进行安装lxml

#!/usr/bin/python
#--*--coding:UTF-8--*--
from lxml import etree
import re


def operationXML(xml_file,lastModparentNode,lastModChildNode=[]):
    try:
        parentNode = ""
        allChildNodes = []
        doc = etree.ElementTree(file = xml_file)
        root = doc.getroot();
        ns = getNameSpace(doc)
        if ns != None:
            parentNode = root.findall(ns+lastModparentNode,namespaces = None)
        else:
            parentNode = root.findall(lastModparentNode,namespaces = None)
        if parentNode == None or len(parentNode) == 0:
            print ("%s is emtpy"%(xml_file))
        else:
            for node_contents in parentNode:
                childNode=[]
                if len(lastModChildNode)!=0:
                    for childeNode in lastModChildNode:
                        node_text =""
                        if ns== None:
                            node_text = node_contents.find(childeNode)
                        else:
                            node_text = node_contents.find(ns+childeNode)
                        childNode.append(node_text.text)
                else:
                    for childAll in  list(node_contents):
                        childNode.append(childAll.text)
                allChildNodes.append(childNode)
            print allChildNodes
    except Exception,e:
        print e


#根据doc获得namespaces
def getNameSpace(doc):
    ns = None
    try:
        root = doc.getroot()
        r = re.compile('({.+})')
        if r.search(root.tag)!=None:
            ns = r.search(root.tag).group(1)
    except Exception, e:
        print e
    return ns




if __name__ =="__main__":
    """
        xml的内容如下:(目前中文会乱码 )
        <?xml version="1.0" encoding="UTF-8"?> 
        <employees> 
                <employee> 
                    <name>xiaozhao</name> 
                    <sex>m</sex> 
                    <age>30</age> 
                </employee> 
                <employee> 
                    <name>zhao</name> 
                    <sex>boy</sex> 
                    <age>12</age> 
                </employee> 
        </employees>
    """
    operationXML("D:/a.xml", "employee",["name"])


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

趙大叔

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值