2013-08-07 7 views
10

में ElementTree Element टेक्स्ट फ़ील्ड को कैसे सेट करें मैं अपने कन्स्ट्रक्टर से ElementTree Element के टेक्स्ट फ़ील्ड को कैसे सेट करूं? या, नीचे दिए गए कोड में, root.text का दूसरा प्रिंट क्यों नहीं है?कन्स्ट्रक्टर

import xml.etree.ElementTree as ET 

root = ET.fromstring("<period units='months'>6</period>") 
ET.dump(root) 
print root.text 

root=ET.Element('period', {'units': 'months'}, text='6') 
ET.dump(root) 
print root.text 

root=ET.Element('period', {'units': 'months'}) 
root.text = '6' 
ET.dump(root) 
print root.text 

यहाँ उत्पादन:

<period units="months">6</period> 
6 
<period text="6" units="months" /> 
None 
<period units="months">6</period> 
6 

उत्तर

7

निर्माता इसका समर्थन नहीं करता:

class Element(object): 
    tag = None 
    attrib = None 
    text = None 
    tail = None 

    def __init__(self, tag, attrib={}, **extra): 
     attrib = attrib.copy() 
     attrib.update(extra) 
     self.tag = tag 
     self.attrib = attrib 
     self._children = [] 

आप निर्माता के लिए एक कीवर्ड तर्क के रूप में text पार कर लेते हैं, तो आप एक text जोड़ देगा आपके तत्व के लिए विशेषता, जो आपके दूसरे उदाहरण में हुआ था।

+1

धन्यवाद! (मुझे दस्तावेज़ीकरण के बजाय कोड पढ़ना चाहिए था!) –

3

निर्माता इसके लिए अनुमति नहीं है, क्योंकि वे सोचा कि यह हर foo=bar के अलावा एक विशेषता जोड़ने के लिए अनुचित होगा यादृच्छिक दो: text और tail

अगर आपको लगता है कि यह एक मूक निर्माता को दूर करने के कारण है आराम (जैसा कि मैं करता हूं) तो आप अपना स्वयं का तत्व बना सकते हैं। मैंने किया। मेरे पास सबक्लास के रूप में है और parent पैरामीटर जोड़ा गया है। यह आपको अभी भी बाकी सब कुछ के साथ उपयोग करने की अनुमति देता है!

अजगर 2.7:

import xml.etree.ElementTree as ET 

# Note: for python 2.6, inherit from ET._Element 
#  python 2.5 and earlier is untested 
class TElement(ET.Element): 
    def __init__(self, tag, text=None, tail=None, parent=None, attrib={}, **extra): 
     super(TextElement, self).__init__(tag, attrib, **extra) 

     if text: 
      self.text = text 
     if tail: 
      self.tail = tail 
     if not parent == None: # Issues warning if just 'if parent:' 
      parent.append(self) 

अजगर 2.6:

#import xml.etree.ElementTree as ET 

class TElement(ET._Element): 
    def __init__(self, tag, text=None, tail=None, parent=None, attrib={}, **extra): 
     ET._Element.__init__(self, tag, dict(attrib, **extra)) 

     if text: 
      self.text = text 
     if tail: 
      self.tail = tail 
     if not parent == None: 
      parent.append(self) 
संबंधित मुद्दे