2014-07-11 3 views
0

J'essaie de trouver le moyen le plus simple de copier un noeud vers un autre fichier XML. Les deux fichiers contiendront le même noeud - seul le contenu de ce noeud sera différent.Copier un noeud d'un fichier xml à un autre en utilisant lxml

Dans le passé, je l'ai fait une copie fou de chaque élément et sous-élément - mais il doit y avoir une meilleure façon ..

#Master XML 
parser = etree.XMLParser(strip_cdata=False) 
tree = etree.parse('file1.xml', parser) 
# Find the //input node - which has a lot of subelems 
inputMaster= tree.xpath('//input')[0] 

#Dest XML - 
parser2 = etree.XMLParser(strip_cdata=False) 
tree2 = etree.parse('file2.xml', parser2) 
# this won't work but.. it would be nice 
etree.SubElement(tree2,'input') = inputMaster 

Répondre

0

Voici une façon - ce ne est pas brillante car il perd la position (c'est-à-dire qu'il fait apparaître le nœud à la fin) mais bon ..

def getMaster(somefile): 
     parser = etree.XMLParser(strip_cdata=False) 
     tree = etree.parse(somefile, parser) 
     doc = tree.getroot() 
     inputMaster = doc.find('input') 
     return inputMaster 

    inputXML = getMaster('master_file.xml') 
    parser = etree.XMLParser(strip_cdata=False) 
    tree = etree.parse('file_to_copy_node_to.xml', parser) 
    doc = tree.getroot() 
    doc.remove(doc.find('input')) 
    doc.append(inputXML) 
    # Now write it 
    newxml = etree.tostring(tree, pretty_print=True) 
    f = open('file_to_copy_node_to.xml', 'w') 
    f.write(newxml) 
    f.close() 
Questions connexes