2017-01-09 11 views
0

Я написал приведенный ниже код для создания умеренно большого XML-файла, в котором я буду создавать узлы в цикле.Добавить новый узел в XML с помощью python

import xml.etree.cElementTree as ET 
number = 0 

def xml_write(number,doc): 
    ET.SubElement(doc, "extra-TextID", used="true").text = ""+str(number) ##in each loop number will be changed from 0 to 9 

while number != 10: 
    doc = ET.Element("message") 
    xml_write(number,doc) 
    tree = ET.ElementTree(doc) 
    tree.write('XML_file.xml') 
    number = number + 1 

Но работает вышеуказанный код, который я только получаю последний узел, то есть, с «9» в последней строке. Данные заменяются в файле. Как добавить его, чтобы я получил все узлы, содержащие от 0 до 9 в каждом узле.

<?xml version="1.0"?> 
    -<message> 
     <source>Rain</source> 
     <translations language="Dev">Cyclone</translations> 
     <extra-TextID used="true">9</extra-TextID> 
    <message> 

Мне нужно, чтобы получить XML-файл, как:

<?xml version="1.0"?> 
    -<message> 
     <source>Rain</source> 
     <translations language="Dev">Cyclone</translations> 
     <extra-TextID used="true">0</extra-TextID> 
    <message> 
    <?xml version="1.0"?> 
    -<message> 
     <source>Rain</source> 
     <translations language="Dev">Cyclone</translations> 
     <extra-TextID used="true">1</extra-TextID> 
    <message> 
    <?xml version="1.0"?> 
    -<message> 
     <source>Rain</source> 
     <translations language="Dev">Cyclone</translations> 
     <extra-TextID used="true">3</extra-TextID> 
    <message> 
     . 
     . 
     . 
    <?xml version="1.0"?> 
    -<message> 
     <source>Rain</source> 
     <translations language="Dev">Cyclone</translations> 
     <extra-TextID used="true">9</extra-TextID> 
    <message> 

ответ

1

Библиотека ElementTree не сваливать в XML с несколькими корневыми элементами. Если вы хотите получить этот вид в файле XML, добавьте созданные элементы вручную:

with open('XML_file.xml', 'wb') as f: 
    while number != 10: 
     doc = ET.Element("message") 
     xml_write(number, doc) 

     f.write(ET.tostring(doc, method="xml")) 

     number += 1 
+0

Большое спасибо, это сработало. – Ghost

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