在Python ElementTree中的Case Insensitive findall

时间:2012-02-25 03:22:35

标签: python xml

我必须解析具有任何标签名称的XML(混合,上层,下层等),我不知道事先会是什么情况。如何在ElementTree中使findall完全不区分大小写?

   # Does not work
   variables = message.findall("VaRiAbLE")

2 个答案:

答案 0 :(得分:6)

您只需从树中获取字符串,将其缩小并重新制作树。那么它应该是可解析的

import xml.etree.ElementTree as ET
def to_parseable(tree):
    t = ET.tostring(tree)
    t = t.lower()
    return ET.fromstring(t)

答案 1 :(得分:1)

正规救援。请注意,这在性能方面可能很可怕,但在元素提取的XML属性方面非常出色。

def getInsensitiveAttrbiute(element, key) :

   keyRegex = re.compile(key, re.IGNORECASE)
   for key in element.attrib.keys() :
       if keyRegex.match(key) :
           return element.attrib[key]
   raise KeyError


element = ET.fromstring('<FOO src="BAR" />')
print getInsensitiveAttrbiute(element, "sRc")