2010-10-11 2 views
0

J'ai besoin d'analyser un document HTML pour extraire tous les balises H1 et tout le HTML entre eux. J'ai joué avec HtmlAgilityPack pour y parvenir avec un certain succès. Je pourrais extraire toutes les balises H1 en utilisant:Comment obtenir du texte HTML entre les balises H1 en C#

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//h1"))

Mais comment puis-je extraire tout le code HTML après chaque balise H1 jusqu'à ce que je frappe la balise suivante H1? Ce HTML pourrait inclure n'importe quoi d'une table/image/lien ou toute autre chose sur une page HTML, mais une balise H1.

Merci d'avance.

+0

Je pense que vous cherchez une solution de coupe-biscuit qui n'existe pas. Vous ne pouvez pas simplement sélectionner tous les éléments XML entre deux éléments aléatoires, pas par aucune méthode que j'ai jamais entendu parler. Ce que vous pourriez faire est une sorte de combinaison de NextElement avec le comportement de marche d'arbre, mais vous devez considérer qu'un H1 pourrait être imbriqué, ainsi vous ne pouvez pas simplement obtenir l'élément frère suivant. – jcolebrand

+0

'H1's ne sont pas autorisés à être imbriqués, puisque' H1's sont seulement autorisés à contenir des éléments en ligne. Un H1 n'est donc pas autorisé à contenir une table. Il est recommandé, bien que n'étant pas une norme, qu'il n'y ait qu'un * élément * H1 dans un document. Si vous contrôlez le HTML, vous devriez en faire plus, um, * sane *, avant de l'analyser. –

Répondre

1

Solution possible: Obtenez le HTML complet sous forme de chaîne, remplacez < H1> avec un HTML signe ne sait pas (par exemple ü, HTML utilise & uuml;), puis diviser la chaîne par ce signe dans un tableau.

Maintenant, vous recherchez (avec RegEx par exemple) pour les nœuds qui ont des balises de début et de fin et seulement les analyser.

Rapide et sale, mais devrait fonctionner.

Veuillez noter que, comme drachenstern l'a mentionné, les balises H1 imbriquées conduiront à ce que les nœuds parents ne soient pas analysés.