怎样用 python 解析三层结构 XML( 二 )
于是根节点没有了子节点,循环结束,返回结果。
之后就直接上代码:
我这里采用一个类的方式来写。class ParserTree(object):"""\t用来解析XML文件,并将其以字典形式返回\t@Author : guiqiqi187@gmail.com\t@Date : 2017-4-9\t"""def __init__(self, XMLfileName, key = "Key", value = "https://www.zhihu.com/api/v4/questions/58293994/Value", attr = "Attr"):"""\t\t类构造函数\t\ttree : 当前的XML树,\t\trootNode : 根节点,\t\tself.currentNode : 当前节点 (初始为根节点),\t\tself.parentNode : 当前结点的父节点列表,\t\tself.childNode : 当前结点的子节点,\t\tkeyName, valueName, attrName : 合并节点时需要使用的信息,\t\tresult : 需要返回的结果集\t\t"""tree = ET.parse(XMLfileName)rootNode = self.rootNode = tree.getroot()self.currentNode = rootNodeself.rootNodeTag = rootNode.tagself.key = keyself.value = https://www.zhihu.com/api/v4/questions/58293994/valueself.attr = attrself.childNode = list()self.parentNode = list()self.result = dict()def go(self):while self.rootNode.getchildren():self.childNode = self.currentNode.getchildren()childNodePointer = 0haveChild = Falsefor node in self.childNode:if len(node.getchildren()) != 0:haveChild = TruebreakchildNodePointer += 1if haveChild:self.parentNode.append(self.currentNode)self.currentNode = self.childNodeelse:lastNode = self.currentNodeself.mergeNode()self.currentNode = self.parentNode.pop()self.currentNode.remove(lastNode)continuereturnDict = {self.rootNodeTag : self.result}return returnDictdef mergeNode(self):passmergeNode是一个用来合并节点的函数,大家可以根据需要自己写一个。
构造函数中key,value,attr,分别指合并时候获取到的标签名,值名,属性名称。
下面是一个例子,大家不想看的就可以直接跳过了:\u0026lt;?xml version="1.0" encoding="UTF-8"?\u0026gt;\u0026lt;DATABASE\u0026gt;\u0026lt;GOODS\u0026gt;\u0026lt;INDEX\u0026gt;\u0026lt;GOODID NULL="FALSE"\u0026gt;TEXT\u0026lt;/GOODID\u0026gt;\u0026lt;/INDEX\u0026gt;\u0026lt;OTHERS\u0026gt;\u0026lt;PRICE NULL="FALSE"\u0026gt;FLOAT\u0026lt;/PRICE\u0026gt;\u0026lt;TIME NULL="FALSE"\u0026gt;INT\u0026lt;/TIME\u0026gt;\u0026lt;THUMBS NULL="FALSE"\u0026gt;TEXT\u0026lt;/THUMBS\u0026gt;\u0026lt;SALES NULL="FALSE"\u0026gt;INT\u0026lt;/SALES\u0026gt;\u0026lt;/OTHERS\u0026gt;\u0026lt;/GOODS\u0026gt;\u0026lt;HISTORY\u0026gt;\u0026lt;INDEX\u0026gt;\u0026lt;USERID NULL="FALSE"\u0026gt;TEXT\u0026lt;/USERID\u0026gt;\u0026lt;/INDEX\u0026gt;\u0026lt;OTHERS\u0026gt;\u0026lt;BUYTIME NULL="FALSE"\u0026gt;INT\u0026lt;/BUYTIME\u0026gt;\u0026lt;ORDERNUM NULL="FALSE"\u0026gt;TEXT\u0026lt;/ORDERNUM\u0026gt;\u0026lt;PAYMENT NULL="FALSE"\u0026gt;INT\u0026lt;/PAYMENT\u0026gt;\u0026lt;SUCCESS NULL="FALSE"\u0026gt;INT\u0026lt;/SUCCESS\u0026gt;\u0026lt;/OTHERS\u0026gt;\u0026lt;/HISTORY\u0026gt;\u0026lt;ADMIN\u0026gt;\u0026lt;INDEX\u0026gt;\u0026lt;ACCOUNT NULL="FALSE"\u0026gt;TEXT\u0026lt;/ACCOUNT\u0026gt;\u0026lt;/INDEX\u0026gt;\u0026lt;OTHERS\u0026gt;\u0026lt;PASSWORD NULL="FALSE"\u0026gt;TEXT\u0026lt;/PASSWORD\u0026gt;\u0026lt;/OTHERS\u0026gt;\u0026lt;/ADMIN\u0026gt;\u0026lt;SALEINFO\u0026gt;\u0026lt;INDEX\u0026gt;\u0026lt;DATE NULL="FALSE"\u0026gt;INT\u0026lt;/DATE\u0026gt;\u0026lt;/INDEX\u0026gt;\u0026lt;OTHERS\u0026gt;\u0026lt;TURNOVER NULL="FALSE"\u0026gt;FLOAT\u0026lt;/TURNOVER\u0026gt;\u0026lt;MOSTGOOD NULL="FALSE"\u0026gt;TEXT\u0026lt;/MOSTGOOD\u0026gt;\u0026lt;/OTHERS\u0026gt;\u0026lt;/SALEINFO\u0026gt;\u0026lt;USER\u0026gt;\u0026lt;INDEX\u0026gt;\u0026lt;USERID NULL="FALSE"\u0026gt;TEXT\u0026lt;/USERID\u0026gt;\u0026lt;/INDEX\u0026gt;\u0026lt;OTHERS\u0026gt;\u0026lt;PHONE NULL="FALSE" UNIQUE="TRUE"\u0026gt;TEXT\u0026lt;/PHONE\u0026gt;\u0026lt;SEX NULL="TRUE"\u0026gt;INT\u0026lt;/SEX\u0026gt;\u0026lt;AVATAR NULL="TRUE"\u0026gt;TEXT\u0026lt;/AVATAR\u0026gt;\u0026lt;NICKNAME NULL="FALSE"\u0026gt;TEXT\u0026lt;/NICKNAME\u0026gt;\u0026lt;REGTIME NULL="FALSE"\u0026gt;INT\u0026lt;/REGTIME\u0026gt;\u0026lt;LOCATE NULL="TRUE"\u0026gt;TEXT\u0026lt;/LOCATE\u0026gt;\u0026lt;PASSWORD NULL="TRUE"\u0026gt;TEXT\u0026lt;/PASSWORD\u0026gt;\u0026lt;/OTHERS\u0026gt;\u0026lt;/USER\u0026gt;\u0026lt;WXREPLY\u0026gt;\u0026lt;INDEX\u0026gt;\u0026lt;MSGTYPE NULL="FALSE"\u0026gt;INT\u0026lt;/MSGTYPE\u0026gt;\u0026lt;MSG NULL="FALSE"\u0026gt;TEXT\u0026lt;/MSG\u0026gt;\u0026lt;/INDEX\u0026gt;\u0026lt;OTHERS\u0026gt;\u0026lt;RTMSGTYPE NULL="FALSE"\u0026gt;INT\u0026lt;/RTMSGTYPE\u0026gt;\u0026lt;RTMSG NULL="FALSE"\u0026gt;TEXT\u0026lt;/RTMSG\u0026gt;\u0026lt;/OTHERS\u0026gt;\u0026lt;/WXREPLY\u0026gt;\u0026lt;/DATABASE\u0026gt;
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 怎样成为一名合格的Python程序员?
- 怎样评价华为、诺基亚、中兴中标中国移动高端路由交换设备扩容集采
- 怎样评价类似前橙会、百老汇、南极圈这样类型的离职帮抱团,对企业的积极意义和消极意义
