2016-06-24 6 views
-1

안녕 내 내가 "장치"아래 위의 XML의 다른 "디스크"절를 추가하고자하는 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> 
     </devices> 
</domain> 

기존됩니다 파이썬으로 기존 XML에 새로운 데이터를 추가 할 수 있습니다 섹션 내 새 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> 

당신은 내가 파이썬 XML

브롬과 함께 할 수있는 방법을 좀 도와 주시겠습니까.

우마르는

답변

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