J'ai un document html, dans lequel certains éléments contiennent des éléments que je veux cacher (comme le gouvernement chinois le fait, sauf que je veux juste cacher des informations confidentielles). Par exemple dire que j'ai:python: Remplacer un élément HTML en fonction de son contenu
<div>
<span> bkhiu jknd o so so so yui iou 789 </span>
<span>
bkhiu
<div> 56 898tr SECRET oij890 </div>
</span>
</div>
Et je veux obtenir tous les éléments qui contiennent la chaîne SECRET
, et il suffit de remplacer leur contenu entier par ###:
<div>
<span> bkhiu jknd o so so so yui iou 789 </span>
<span>
bkhiu
<div>###</div>
</span>
</div>
J'ai pensé à utiliser minidom
et re
avec quelque chose comme:
xmldoc = minidom.parseString(my_html_string)
# filtering nodes by their content
sensitive_nodes = filter(lambda n: re.search('SECRET', n.nodeValue),
xmldoc.getElementsByTagName())
# replacing content
for node in sensitive_nodes:
node.nodeValue = '###'
# output
my_html_string = xmldoc.toxml()
Mais d'abord, l'analyse syntaxique ne réussit même pas:
ExpatError: mismatched tag: line 27, column 6
Et .getElementsByTagName()
a besoin d'un paramètre tagName
... alors que je ne me soucie pas du nom de la balise et besoin de tous les nœuds (pour filtrer leur contenu). Eh bien, fondamentalement, ce code ne fonctionne pas du tout, mais c'est juste pour essayer d'expliquer ce que je veux réaliser.
Une idée de comment je pourrais le faire facilement? Avec minidom ou quelque chose de complètement différent?
Bonjour, pourriez-vous indiquer quelle ligne est la ligne 27? :) – Skurmedel
Droit! C'est le début du document: http://dpaste.com/531242/ (et ln 27 est le dernier, même s'il est affiché ici en 24 ici ...) – sebpiq