我需要解析XML,但标签名可能是任何形式的大小写(混合大小写、全大写、全小写等),而且我不知道预先知道它的大小写方式。如何使ElementTree中的findall完全不区分大小写?
# Does not work
variables = message.findall("VaRiAbLE")
我需要解析XML,但标签名可能是任何形式的大小写(混合大小写、全大写、全小写等),而且我不知道预先知道它的大小写方式。如何使ElementTree中的findall完全不区分大小写?
# Does not work
variables = message.findall("VaRiAbLE")
您只需从树中获取字符串,将其转换为小写并重构树。这样就可以进行解析。
import xml.etree.ElementTree as ET
def to_parseable(tree):
t = ET.tostring(tree)
t = t.lower()
return ET.fromstring(t)
正则表达式来拯救。请注意,这可能在性能方面很可怕,但非常适合从元素中提取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")