2012-02-25 14 views
5

में केस असंवेदनशील खोजल मुझे XML को पार्स करना है जिसमें टैग नाम हैं जो किसी भी मामले (मिश्रित, ऊपरी, निचले, आदि) में हो सकते हैं और मुझे नहीं पता कि मामला पहले से क्या होगा। ElementTree में मैं पूरी तरह से असंवेदनशील कैसे हो सकता हूं?पायथन ElementTree

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

क्योंकि 'एक्सएमएल' केस-संवेदी है। – kev

+1

मैं समझता हूं कि एक्सएमएल केस संवेदनशील है। मैं इस एक्सएमएल की पीढ़ी को नियंत्रित नहीं करता हूं इसलिए प्रश्न खड़ा है ... किसी भी मामले में एक टैग की खोज कैसे मिल सकती है? बूस्ट iptree करता है। मैंने माना कि ElementTree भी होगा। – 01100110

उत्तर

5

आप बस पेड़ से स्ट्रिंग मिलता है, यह लोअरकेस, और पेड़ रीमेक। फिर यह

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

धन्यवाद। मैंने कोशिश किए गए सभी समाधानों में से, यह दृष्टिकोण सर्वोत्तम काम करता है। मैं मानता हूँ कि मैं एक्सएमएल के निर्माता के रूप यह करने के लिए टैग में लगातार मामले का उपयोग करें और विशेषता नाम चाहिए नहीं करना चाहिए था, लेकिन जब वह अपने नियंत्रण से बाहर है और आप XML इस तरह की है, तो ElementTree कार्यों में इस दृष्टिकोण के साथ सौदा करना चाहिए । – 01100110

+2

डब्ल्यूटीएफ, आप यह क्यों कर रहे हैं? कम से कम टैग और विशेषता नाम, जीज़ पर लागू करने के लिए रेगेक्स का उपयोग करें। – sleepycal

1

बचाव के लिए Regex होना चाहिए। नोट यह प्रदर्शन के संदर्भ में शायद भयानक है लेकिन तत्वों से निकाले गए एक्सएमएल गुणों में बहुत अच्छा है।

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") 
संबंधित मुद्दे