Python xml解析記錄
阿新 • • 發佈:2019-01-29
Python的xml解析方式自帶的有3種,xml.dom.*、xml.sax.*以及xml.etree.ElementTree,相對來說,xml.etree.ElementTree最快捷方便。
因為自己只使用了xml.etree.ElementTree,所以下面就簡單記錄下xml.etree.ElementTree相關的東西。
基本讀寫
xmlTree = ElementTree.parse('a.xml') #讀入 xmlNodeList = xmlTree.getiterator('Item') #獲取指定節點 for node in xmlNodeList: print 'node.tag:%s' % node.tag #節點名 print 'node.text:%s' % node.text #節點文字 if node.attrib.has_key('attr_name'): #節點attribute print 'node.attrib[%s]:%s' % ('attr_name',node.attrib['attr_name'])) keyPath = node.attrib['attr_name']
xml內含有namespace的坑
如果xml檔案有namespace的,ElementTree會修改namespace的名字,一般會改成ns0之類的,如果不希望被更改的話,這樣玩:XML_NS_NAME = 'my_ns'
XML_NS_VALUE = 'http://xxx'
ElementTree.register_namespace(XML_NS_NAME, XML_NS_VALUE) #在parse之前呼叫
有namespace的時候,查詢需要轉換namespace,比如有個節點的attr是:my_ns:name,那麼在ElementTree內部會解析成{http://xxx}name,所以查詢的時候也需要用{http://xxx}name才能找到。 附一個轉換函式:
#xml有namespace的轉換成正常可解析的值 有則轉換,沒有則返回原值 def ParseNameSpace(src, nsName, nsValue): if src.find(nsName) != -1: dst = src.replace('%s:' % nsName, '{%s}' % nsValue) print 'ns src:%s dst:%s' % (src, dst) return dst return src