2011-06-13 29 views
1

正在使用Python創建包含一些數據的XML文件。我正在嘗試將字典中的值設置爲列表中的數據。我將要製作多行,所以這就是爲什麼我以這種方式引用每個值。多謝你們。這裏是我的代碼:.set()方法不在Python的xml.etree庫中?

from xml.etree import ElementTree as ET 

root = ET.Element("painter") 
root.set('version', '1.0') 
linenum = 0 
pointnum = 0 

smpl_data = [[[20,40],(0,0,1,1)],[[10,50],(0,0,1,1)],[[78,89],(0,0,1,1)]] 

while linenum <= len(smpl_data): #smpl_data change to self.lines 
    elem_line = ET.SubElement(root,"line" + str(linenum), attrib={"r": "1", "g": "2", "b": "3", "a": "4"}) 
    print elem_line 
    print elem_line.attrib.get("r")      
    print elem_line.attrib.set("r", "smpl_data[linenum][2]") 
    # I get an attribute error: 'dict' object has no attribute 'set' 

它雖然文件中清楚地顯示...

http://docs.python.org/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element.set

感謝您的幫助。

回答

1

您正在致電get()set()Elementattrib成員。 attrib是一個普通的舊Python字典,沒有set()函數。您鏈接的文檔是針對實際的Element對象本身的set()函數。

attrib成員設置的值,你可以使用:

elem_line.attrib['r'] = smpl_data[linenum][2] 

如果你想使用Element代替:

elem_line.get('r') 
elem_line.set('r', smpl_data[linenum][2]) 
+0

感謝這有助於一噸!我意識到我需要執行smpl_data [linenum] [1] [0]來訪問值「r」,但elem_line.get(「r」)和elem_line.set(「r」,smpl_data ...)很好。 – Joe 2011-06-13 19:05:31