Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python元素树中不区分大小写的findall_Python_Xml - Fatal编程技术网

Python元素树中不区分大小写的findall

Python元素树中不区分大小写的findall,python,xml,Python,Xml,我必须解析具有标记名的XML,这些标记名在任何情况下都可能是(混合的、较高的、较低的等等),我不知道事先会是什么情况。如何使findall在ElementTree中完全不区分大小写 # Does not work variables = message.findall("VaRiAbLE") 您只需从树中获取字符串,将其小写,然后重新生成树。那么它应该是可解析的 import xml.etree.ElementTree as ET def to_parseable(tree):

我必须解析具有标记名的XML,这些标记名在任何情况下都可能是(混合的、较高的、较低的等等),我不知道事先会是什么情况。如何使findall在ElementTree中完全不区分大小写

   # 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")
def GetInsensitiveATRTRBIUTE(元素,键):
keyRegex=re.compile(key,re.IGNORECASE)
对于元素中的键。attrib.keys():
如果keyRegex.匹配(键):
返回元素.attrib[key]
上升键错误
元素=ET.fromstring(“”)
打印getInsensitiveAttrbiute(元素,“sRc”)

因为
XML
是区分大小写的。我知道XML是区分大小写的。我不控制XML的生成,所以问题是。。。findall如何搜索在任何情况下都可能出现的标记?我就是这么做的。我想ElementTree也会的谢谢。在我尝试过的所有解决方案中,这种方法效果最好。我同意我不应该这样做,因为XML的创建者应该在标记和属性名称中使用一致的大小写,但是当它超出您的控制,并且您必须处理这种XML时,ElementTree中的这种方法就起作用了。Wtf,您为什么要这样做?至少使用正则表达式使其仅适用于标记和属性名,天哪。这不好。上面的代码也将有用的数据转换为小写。