9
votes

Dettez le texte du document HTML en utilisant Ruby

Il existe de nombreux exemples de manière à supprimer des balises HTML à partir d'un document utilisant Ruby, Hpricot et Nokogiri ont des méthodes intérieures_text qui suppriment tout HTML pour vous facilement et rapidement.

Ce que j'essaie de faire est le contraire, supprimez tout le texte d'un document HTML, laissant simplement les balises et leurs attributs.

J'ai considéré comme une boucle via le paramètre de document inner_html à nil, mais vous devriez alors le faire en sens inverse car le premier élément (racine) a un inner_html de tout le reste du document, donc idéalement que je devrais avoir à Commencez à l'intérieur le plus interne et réglez inner_html à Nil tout en vous déplaçant à travers les ancêtres.

Est-ce que quelqu'un connaît une petite astuce soignée pour le faire efficacement? Je pensais peut-être que les regexs pourraient le faire, mais probablement pas aussi efficacement qu'un tokéniseur / analyseur HTML.


2 commentaires

Allez-vous devoir faire face à une mauvaise balise? (entités non évaluées, etc.)


Il est possible - le balisage que je traite provient des utilisateurs finaux, donc ne peut pas être invoqué.


4 Réponses :


3
votes

Vous pouvez numériser la chaîne pour créer un tableau de "jetons", puis sélectionnez ceux qui sont des balises HTML: xxx

== EDIT ==

Ou encore mieux, il suffit de numériser les balises HTML;) xxx


0 commentaires

3
votes

Pour saisir tout ce qui n'est pas dans une étiquette, vous pouvez utiliser Nokogiri comme ceci: xxx

bien sûr, qui prendra des trucs comme le contenu de