ElementTree : comment cloner un element ?

Le
m.banaouas
bonjour,

dans le cadre de l'utilisateion du module ElementTree, j'ai eu besoin de cloner
un élément. N'ayant pas trouvé un tel outil, j'ai commencé à écrire la fonction
"CloneElment" suivante:

def CloneElment(fromElem, destRoot = None):
"""
fromElem est l'élément à cloner
destRoot est le parent du clone (nouvel élément obtenu par clonage); si None
alors le parent sera celui de l'élément à cloner.
L'opération de clonage est récursive afin de traiter toute la sous-arborescence
de l'élément à cloner.
"""
if destRoot == None:
fromRoot = ET.ElementTree(fromElem).getroot()
destRoot = fromRoot
destElem = destRoot.makeelement(fromElem.tag, fromElem.attrib)
destRoot.append(destElem)
destElem.text = fromElem.text
for e in fromElem.findall('*'):
CloneElement(e, destElem)
#
cette fonction marche bien uniquement dans le cas où le destRoot est fourni par
le contexte appelant.

Le problème concerne la détermination de l'élément parent d'un élément elem à
partir de lui-même, c.à.d à partir de ses methodes propres.
Pour ce faire, cette écriture "ET.ElementTree(fromElem).getroot()" s'est révélée
fausse car elle renvoie fromElem lui-même!

Pour l'instant, j'ai remédié à cela en transmettant le paramètre destRoot depuis
le contexte appelant. Mais si qqun a une piste, je suis preneur

Merci d'avance
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
moky
Le #18559771
m.banaouas ha scritto:

bonjour,

dans le cadre de l'utilisateion du module ElementTree, j'ai eu besoin de cloner
un élément. N'ayant pas trouvé un tel outil, j'ai commencé à écrire la fonction
"CloneElment" suivante:



La fonction copy.deepcopy() sert à ça, je crois. Ca copie un objet, par
véritable copie, et non par assignation comme d'habitude.


Laurent
m.banaouas
Le #18560751
ok pour copy.deepcopy(), je vais regarder ...

mais il semble qu'il ne soit pas possible de déterminer l'element parent d'un
element en interrogeant element lui-même, alors que nous disposons de moyens
pour déterminer les elements fils de tout element.

moky a écrit :
m.banaouas ha scritto:

bonjour,

dans le cadre de l'utilisateion du module ElementTree, j'ai eu besoin
de cloner
un élément. N'ayant pas trouvé un tel outil, j'ai commencé à écrire
la fonction
"CloneElment" suivante:



La fonction copy.deepcopy() sert à ça, je crois. Ca copie un objet, par
véritable copie, et non par assignation comme d'habitude.


Laurent


Fred Pacquier
Le #18561471
"m.banaouas"
ok pour copy.deepcopy(), je vais regarder ...

mais il semble qu'il ne soit pas possible de déterminer l'element
parent d'un element en interrogeant element lui-même, alors que nous
disposons de moyens pour déterminer les elements fils de tout element.



BeautifulSoup est plus pratique pour ce genre de chose alors.
olive
Le #18569481
On Feb 2, 4:40 pm, "m.banaouas"
ok pour copy.deepcopy(), je vais regarder ...

mais il semble qu'il ne soit pas possible de déterminer l'element paren t d'un
element en interrogeant element lui-même, alors que nous disposons de m oyens
pour déterminer les elements fils de tout element.



Je te conseil LXML qui est conforme à l'API de ET mais qui apporte
beaucoup plus de choses, dont l'accès au parent.
Publicité
Poster une réponse
Anonyme