lxml -> kopiert Kindelemente nicht!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
alexPython
User
Beiträge: 52
Registriert: Donnerstag 7. April 2011, 13:26

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ß
Zuletzt geändert von Anonymous am Dienstag 21. Juni 2011, 09:44, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
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.
Antworten