C# - Supprimer les espaces dans la source HTML entre les balises?
Je suis actuellement en train de travailler sur un programme qui me permet d'entrer le code source HTML dans un contrôle RichTextBox et supprime les espaces entre les balises. Le seul problème est que je ne suis pas sûr de savoir comment je peux différencier les espaces ENTRE les balises et les espaces à l'INTÉRIEUR des balises. Évidemment, en supprimant les espaces à l'intérieur de la majoration serait mauvais. Toutes les idées de comment je peux faire la différence?
Exemple: (avant de l'espace blanc est supprimé)
<p>blahblahblah</p> <p>blahblahblah</p>
Exemple: (après l'espace blanc est supprimé)
<p>blahblahblah</p><p>blahblahblah</p>
- Des espaces-vous allusion? Ceux entre les balises, ou celles qui sont à l'intérieur d'une balise unique?
- Les espaces blancs entre les balises. Exemple: <p>blahblahblah</p> <p>blahblahblah</p> L'espace entre les 2 paragraphes.
- Une autre solution en utilisant Html Agility Pack
Vous devez vous connecter pour publier un commentaire.
la solution dans le lien que Rasik envoyé ici c'est une solution pour vous aussi
Réguliers prendre le balisage et l'autour de l'espace de personnages et de les modifier avec le balisage.
Edit:
Une meilleure solution que de travail pour Micheal exemple
cette expression régulière détecter les balises de formatage et de ne pas changer ce qu'il y a à l'intérieur et enlever les espaces de côté.
Il y a quelques autres cas à le regarder aussi. Comme le balisage sans les étiquettes de fin.
Je suis en utilisant le suivant. Sur le dessus de ma tête, c'est les lacunes ne sont pas de la manipulation de supports à l'intérieur de commentaires HTML et à l'intérieur CDATA. Existe-il d'autres crochets dans le code HTML qui ne signifie pas les balises?
Techniquement parlant, tous espaces font partie d'un élément HTML. Le premier élément, c'est à dire, le document, le "propriétaire" de la les espaces entre les différents
<p>
des noeuds dans votre exemple, par exemple.Donc je pense que vous vous demandez si vous pouvez supprimer l'espace entre les nœuds au même niveau. Dans ce cas, vous aurez besoin de garder une trace de l'élément de niveau d'imbrication et de l'élément précédent. Par exemple, une série de
<td>
éléments qui se produisent au sein de la même<tr>
élément, dans lequel vous pouvez détecter la fin d'un</td>
et le début de la prochaine<td>
élément, et d'ignorer tous les espaces entre les deux.Vous pouvez être en mesure de simplifier le processus et simplement ignorer les espaces blancs entre une clôture
</x>
et la balise de la prochaine balise d'ouverture<y>
(mais il peut y avoir quelques difficultés avec cette approche que je ne peux pas penser à du haut de ma tête).Vous pouvez tenter d'utiliser une expression régulière de la bande de l'espace. Toutefois, l'expression devrait être assez complexe de différencier entre l'ouverture et la fermeture des balises et à gérer les balises imbriquées.
Au lieu de cela, vous pourriez analyser le code HTML d'entrée à l'aide d'une bibliothèque comme la Html Agility Pack et puis reconstruire la chaîne HTML à partir du modèle de document. Ce ne sera pas seulement d'éliminer l'espace blanc supplémentaire, il permettra également de valider le HTML (même corriger automatiquement les erreurs courantes).
Ma solution (de la même manière Linarize travaille dans le XML Outils plug-in dans Notepad ++)
Je serais tenté d'utiliser une regex pour correspondre à n'importe quel espace entre une balise de fin, et la place à l'autre balise. Expression régulière correspondant à un modèle permettrait de vous éviter d'avoir à écrire la logique de vous-même.
Je ne suis pas sûr de langage de Programmation que vous utilisez. Mais vous pouvez faire comme suit dans C# à l'aide de Expression Régulière.
Vous pouvez aussi rechercher dans un autre stackoverflow thread peut-être cela va vous aider.
Utilisation d'une expression régulière pour la garniture html