2009-03-17 12 views
3

Comment supprimer les commentaires et le contenu des commentaires d'un fichier HTML en utilisant Java où les commentaires sont écrits comme:Parsing un fichier HTML en utilisant Java

<!-- 

Toute idée ou l'aide nécessaire à ce sujet.

+0

Cette question devrait être nommé « Comment supprimer les commentaires de HTML en utilisant Java » –

Répondre

5

Jetez un oeil à JTidy, le port Java de HTML Tidy. Vous pouvez remplacer les méthodes d'impression de l'objet PPrint pour ignorer les balises de commentaire.

4

Si vous n'avez pas de xhtml valide, dont un commentaire m'a rappelé, vous devez d'abord appliquer jtidy pour ranger le html et le rendre valide xhtml.

Voir this par exemple le code sur jtidy.

Ensuite, je convertirais le HTML en une instance DOM.

comme ceci:

final DocumentBuilderFactory newFactory = DocumentBuilderFactory.newInstance(); 
final DocumentBuilder documentBuilder = newFactory.newDocumentBuilder(); 
Document document = documentBuilder.parse(new InputSource(new StringReader(string))); 

Ensuite, je naviguer dans l'arborescence des documents et modifier les nœuds selon les besoins.

+0

La plupart HTML est autour toujours pas XHTML, donc JTidy devrait probablement être le premier option, pas après coup. –

1

essayer simple regex comme

String commentless = pageString.replaceAll("<!--[\w\W]*?-->", ""); 

modifier: expliquer l'expression rationnelle:

  • <!-- correspond au commentaire littéral commencer
  • [\w\W] matchs tous les personnages (même des sauts de ligne) qui sera à l'intérieur le commentaire
  • *? correspond au multiple de 'n'importe quel caractère' mais correspond à la petite st quantité possible (pas gourmand)
  • --> ferme le commentaire
+0

Une simple regex devrait être capable de faire le travail - mais celui-ci ne ... les commentaires ne sont pas toujours ouverts et fermés sur la même ligne. Je viens de trouver ce lien sur google qui semble mieux: http://ostermiller.org/findhtmlcomment.html –

+0

si vous essayez ceci, cela fonctionne. le \ w \ W attrape tout, y compris les nouvelles lignes, contrairement à '.' – cobbal

+0

Je ne sais pas exactement pourquoi cela est downvoted. Indépendamment de savoir si ce RegEx particulier fonctionne, RegEx est le chemin à parcourir ici. –

Questions connexes