2012-02-25 32 views
5

Tengo que analizar XML que tiene nombres de etiquetas que pueden ser en cualquier caso (mixtos, superiores, inferiores, etc.) y no sé cuál será el caso de antemano. ¿Cómo puedo hacer que findall sea totalmente insensible a mayúsculas y minúsculas en ElementTree?Findall insensible a mayúsculas y minúsculas en Python ElementTree

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

porque 'XML' distingue entre mayúsculas y minúsculas. – kev

+1

Entiendo que XML distingue entre mayúsculas y minúsculas. No controlo la generación de este XML, por lo que la pregunta es ... ¿Cómo puede buscar finalmente una etiqueta que pueda aparecer en cualquier caso? Boost iptree lo hace. Supuse que Element Tree también lo haría. – 01100110

Respuesta

5

Usted simplemente obtiene la cadena del árbol, la minúscula, y rehace el árbol. Entonces debería ser parseable

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

Gracias. De todas las soluciones que probé, este enfoque funciona mejor. Estoy de acuerdo en que no debería tener que hacer esto ya que el creador del XML debería usar un caso consistente en nombres de etiquetas y atributos, pero cuando está fuera de tu control y debes tratar con este tipo de XML, entonces este enfoque en ElementTree funciona . – 01100110

+2

Wtf, ¿por qué estás haciendo esto? Al menos use regex para hacer que esto solo se aplique a los nombres de las etiquetas y los atributos, jeez. – sleepycal

1

Regex to the rescue. Tenga en cuenta que esto es probablemente horrible en términos de rendimiento, pero es excelente para extraer los atributos XML de los elementos.

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") 
Cuestiones relacionadas