使用python将新节点附加到XML中

时间:2017-01-09 14:13:33

标签: python xml

我编写了以下代码来创建适度大的XML文件,其中我将在循环中创建节点。

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 个答案:

答案 0 :(得分: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