2016-06-24 8 views
-1

こんにちは持つ既存のXMLに新しいデータを追加することができますことは、私の既存のXMLファイルは、私が「デバイス」の下に上記のXMLで別の「のディスク部」を追加したいと思いますどのように私はここでのpython

<domain type='kvm'> 
     <name>mydomain</name> 
     <features> 
     <acpi/> 
     <apic/> 
     <pae/> 
     </features> 
     <devices> 
     <disk type='block' device='disk'> 
      <driver name='qemu' type='raw' cache='none'/> 
      <source dev='/dev/mydomain'/> 
      <target dev='vda' bus='virtio'/> 
     </disk> 
     </devices> 
</domain> 

ですセクションので、私の新しいxmlはこのようになります。

<domain type='kvm'> 
     <name>mydomain</name> 
     <features> 
     <acpi/> 
     <apic/> 
     <pae/> 
     </features> 
     <devices> 
     <disk type='block' device='disk'> 
      <driver name='qemu' type='raw' cache='none'/> 
      <source dev='/dev/mydomain'/> 
      <target dev='vda' bus='virtio'/> 
     </disk> 
     <disk type='block' device='disk'> 
      <driver name='qemu' type='raw' cache='none'/> 
      <source dev='/dev/mydomain2'/> 
      <target dev='vdb' bus='virtio'/> 
     </disk> 
     </devices> 
</domain> 

私はPythonのXML

のBrを行うことができますどのように私を助けてくださいだろう。

ウマル

答えて

0

あなたはXMLを解析し、更新するElementTreeを使用することができます。

これを行うコードは次のとおりです。 pretty XMLのフォローについては

import xml.etree.ElementTree as ET 

def get_new_element(): 
    #create element and set attributes 
    disk = ET.Element('disk') 
    disk.attrib['type'] = 'block' 
    disk.attrib['device'] = 'disk' 

    #create sub-element and set attributes 
    driver = ET.SubElement(disk, 'driver') 
    driver.attrib['name'] = 'qemu' 
    driver.attrib['type'] = 'raw' 
    driver.attrib['cache'] = 'none' 

    source = ET.SubElement(disk, 'source') 
    source.attrib['dev'] = '/dev/mydomain2' 

    target = ET.SubElement(disk, 'target') 
    target.attrib['dev'] = 'vdb' 
    target.attrib['bus'] = 'virtio' 

    return disk 


if __name__ == '__main__': 
    xml_tree = ET.parse('data.xml') 
    devices_element = xml_tree.find('devices') 

    new_element = get_new_element() 
    devices_element.append(new_element) 

    new_xml_tree_string = ET.tostring(xml_tree.getroot()) 

    with open('updated_data.xml', "wb") as f: 
     f.write(new_xml_tree_string) 

Pretty-Printing XML

+0

こんにちはparshkr、)あなたの助けのおかげで、私は、ファイルとして代わりに変数にXMLを持っているので、私はET.parse(の代わりに使用するために必要なもの? – Tears

+0

'ET.fromstring(your_xml_string)'を使うことができます。その場合、私はあなたが 'xml_tree.getroot()'を行う必要はないと信じています – prashkr

+0

ありがとう、それはうまくいきました:) – Tears

関連する問題