Seite 1 von 1

lxml -> kopiert Kindelemente nicht!

Verfasst: Dienstag 21. Juni 2011, 08:32
von alexPython
Hallo,

ich gehe ein Etree-Objekt durch und möchte dann die Links
bearbeiten und in einen neuen Etree kopieren.
Leider kopiert er nur den link und nicht die Kindelemente (img) mit.

Code: Alles auswählen

def walk_body(self, node):
        children_body = node.getchildren()

        for child in children_body: #kinder in body
            
            if child.tag == 'a':
                self.index += 1 
                
                attributes = child.attrib
                if attributes.get("href") != None: 
                    
#                    urlEncoded = urllib.quote(attributes.get("href"))
                    child.set("href", "neue url")   
                    
#                    for element in child.iter("img"):
#                        child.append(element)
#                        print element.tag
                        
#                    for childA in child.getchildren():
#                        child.append(childA)
#                        print childA
                
                
                self.root.append(child) # er soll den ganzen knoten kopieren (mit img)
            else:
                self.root.append(child)
            
            
            self.walk_body(child)
gibt es da eine Funktion, die eine deep-copy macht?

oder woran kann es liegen?

Gruß

Re: lxml -> kopiert Kindelemente nicht!

Verfasst: Dienstag 21. Juni 2011, 09:54
von BlackJack
@alexPython: Schau Dir mal `deepcopy()` aus dem `copy()`-Modul an. Du musst auch "einfache" Knoten zwingend kopieren, denn die Elemente haben ja ein `parent`-Attribut. Da jeder Knoten nur einen Elternknoten haben kann, darf ein Knoten auch nur in *einem* Baum und dort auch nur an *einer* Stelle vorkommen.