En Python 2.6 utilisant ElementTree, quel est un bon moyen de récupérer le XML (comme une chaîne) dans un élément particulier, comme ce que vous pouvez faire en HTML et javascript avec innerHTML
?Python et ElementTree: return "inner XML" excluant l'élément parent
Voici un exemple simplifié du noeud XML Je commence avec:
<label attr="foo" attr2="bar">This is some text <a href="foo.htm">and a link</a> in embedded HTML</label>
Je voudrais terminer avec cette chaîne:
This is some text <a href="foo.htm">and a link</a> in embedded HTML
J'ai essayé itérer sur le parent noeud et concaténant le tostring()
des enfants, mais cela m'a donné que les sous-noeuds:
# returns only subnodes (e.g. <a href="foo.htm">and a link</a>)
''.join([et.tostring(sub, encoding="utf-8") for sub in node])
je peux pirater une solution en utilisant des expressions régulières, mais il espérait qu'il y aurait quelque chose de moins hacky que cela:
re.sub("</\w+?>\s*?$", "", re.sub("^\s*?<\w*?>", "", et.tostring(node, encoding="utf-8")))
salut Emil - votre solution fonctionne bien si tout le texte est à l'intérieur des sous-éléments, mais casse dans mon cas où le texte est directement à l'intérieur de l'élément parent. Votre note sur le contenu mixte s'applique clairement ici, même si je ne suis pas sûr (encore) comment combiner la tête, la queue et les sous-éléments ensemble pour émettre une chaîne cohérente. –
plus proche ... mais et.tostring() n'inclut pas la queue de chaque sous-élément. Et je pense que le dom.tail final n'est pas nécessaire puisque c'est la chaîne * après * un élément et non à l'intérieur. –
Je ne semble pas vous comprendre Justin - «commencer ici», «et» et «fin ici» est un texte qui est juste à l'intérieur de l'élément racine ?! L'extrait ci-dessus peut nécessiter quelques manipulations - vous pouvez créer des cas de test et les améliorer - reportez-vous au lien de la documentation sur la gestion du contenu mixte. –