2017-10-06 22 views
1

Supposons que j'ai un ensemble de fichiers texte .html dans le dossier.Recherche en masse et suppression de parties de fichiers HTML à l'aide de CMD ou de JavaScript

Je dois traiter chaque fichier et supprimer le contenu de balises HTML spécifiques, y compris les balises elles-mêmes. Les fichiers doivent être réécrits après le traitement.

Exemples:

  1. Supprimer tous les blocs <script>
  2. Supprimer tous les blocs <div class="test-class"> y compris le contenu intérieur

outils Regex comme sed -i -e 's/REGEX//g' *.html ne sont pas bonnes pour le traitement HTML. Donc, je suis à la recherche d'une solution axée sur l'analyse HTML basée par exemple sur XPATH comme //script, //div[@class="test-class"].

Quelle est la meilleure façon d'y parvenir?

+0

Je suggère utiliser un analyseur XML/HTML (xmlstarlet, xmllint ...). – Cyrus

+0

Si vous [modifiez] votre question pour inclure un exemple avec une entrée d'échantillon concise et testable et une sortie attendue, je pense que vous obtiendrez de l'aide. –

Répondre

2

Pour modifier tous les fichiers .html dans le répertoire en cours avec xmlstarlet:

xmlstarlet edit --inplace --omit-decl --delete '//script' --delete '//div[@class="test-class"]' *.html 

Voir: xmlstarlet edit --help

Cela pourrait aider à un fichier html cassé:

xmlstarlet format --recover --html file.html |\ 
    xmlstarlet edit --omit-decl --delete '//script' --delete '//div[@class="test-class"]' > new.html 
+0

merci @Cyrus. Mais le problème avec 'xmlstarlet' est qu'il est très sensible à la mise en forme html et produit des erreurs comme' l'ouverture et la fin de la discordance des balises', 'Impossible de trouver la fin de Start Tag html'. Il n'a pas d'outils de normalisation html intégrés et je ne vois pas de façon simple comment formater les fichiers html avant de les passer à xmlstarlet. –

+0

@AlexDasata vous pouvez d'abord exécuter les fichiers via HTML Tidy http://www.html-tidy.org/ https://github.com/htacg/tidy-html5 avant de les transmettre à xmlstarlet – sideshowbarker

+0

@AlexDasata: J'ai mis à jour ma réponse. – Cyrus