2016-11-06 1 views
0

Как создать n SubElements? Количество элементов ранее определялось заданным значением (счетчиком). Имена элементов и значений в них одинаковы для всех элементов. Пример:Python XML - Создать n SubElements

<root> 
     <selem>-9999</selem> 
     <selem>-9999</selem> 
     <selem>-9999</selem> 
     <selem>-9999</selem> 
       . 
       . 
       . 
       n 
</root> 

Я пытался что-то вроде

file_count = open('file_count.xml','r') 
data = file_count.read() 
file_count.close() 
dom = parseString(data) 
count = len(dom.getElementsByTagName('timePosition')) 

no_data = '-9999' 
top = etree.Element('root') 
children = [ 
    etree.SubElement(top, 'selem').text = no_data 
    for i in xrange(count) 
    ] 
top.extend(children) 
print etree.tostring(top) 
no_data_xml = etree.ElementTree(top) 
no_data_xml.write(new.xml') 

Tnx

ответ

1

Вы не можете поместить такие заявления, как значение переменной внутри списка понимания. Просто используйте равнину цикл:

for i in xrange(count): 
    elem = etree.SubElement(top, 'selem') 
    elem.text = no_data 
    top.append(elem) 
+0

Вот и все! Thanx – kamfulebu

1

SubElement автоматически добавляет элемент к его родителей, поэтому нет необходимости явно добавлять/не расширять их. Поэтому нет необходимости использовать понимание списка, просто используйте for-loop:

with open('file_count.xml','r') as file_count: 
    data = etree.prase(file_count) 
count = len(data.findall('.//timePosition')) 

no_data = '-9999' 
top = etree.Element('root') 
for i in xrange(count): 
    etree.SubElement(top, 'selem').text = no_data 
no_data_xml = etree.ElementTree(top) 
no_data_xml.write(new.xml') 
+0

Спасибо. Редактируйте праз -> parse; для i в xrange (count) -> для i в xrange (count): – kamfulebu

+0

@kamfulebu: thanks – Daniel

Смежные вопросы