Perdre le signe 'inférieur à' HtmlAgilityPack loadhtml

c# html html-agility-pack

Question

J'ai récemment commencé à expérimenter avec HtmlAgilityPack. Je ne connais pas toutes ses options et je pense donc que je fais quelque chose de mal.

J'ai une chaîne avec le contenu suivant:

string s = "<span style=\"color: #0000FF;\"><</span>";

Vous voyez que dans ma portée j'ai un signe "moins de". Je traite cette chaîne avec le code suivant:

string s = "<span style=\"color: #0000FF;\"><</span>";

Mais quand je fais un rapide coup d’œil sale comme ceci:

string s = "<span style=\"color: #0000FF;\"><</span>";

Je vois que la durée est vide.

De quelle option ai-je besoin pour configurer le maintien du signe "inférieur à"? J'ai déjà essayé ceci:

string s = "<span style=\"color: #0000FF;\"><</span>";

mais sans succès.

Je sais que c'est invalide HTML. J'utilise ceci pour corriger le code HTML invalide et utiliser HTMLEncode sur les signes 'inférieur à'

S'il vous plaît dirigez-moi dans la bonne direction. Merci d'avance

Réponse acceptée

Html Agility Packs détecte cela comme une erreur et crée une instance HtmlParseError pour elle. Vous pouvez lire toutes les erreurs à l'aide de ParseErrors de la classe HtmlDocument. Donc, si vous exécutez ce code:

    string s = "<span style=\"color: #0000FF;\"><</span>";
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(s);
    doc.Save(Console.Out);

    Console.WriteLine();
    Console.WriteLine();

    foreach (HtmlParseError err in doc.ParseErrors)
    {
        Console.WriteLine("Error");
        Console.WriteLine(" code=" + err.Code);
        Console.WriteLine(" reason=" + err.Reason);
        Console.WriteLine(" text=" + err.SourceText);
        Console.WriteLine(" line=" + err.Line);
        Console.WriteLine(" pos=" + err.StreamPosition);
        Console.WriteLine(" col=" + err.LinePosition);
    }

Il affichera ceci (le texte corrigé en premier et des détails sur l'erreur ensuite):

    string s = "<span style=\"color: #0000FF;\"><</span>";
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(s);
    doc.Save(Console.Out);

    Console.WriteLine();
    Console.WriteLine();

    foreach (HtmlParseError err in doc.ParseErrors)
    {
        Console.WriteLine("Error");
        Console.WriteLine(" code=" + err.Code);
        Console.WriteLine(" reason=" + err.Reason);
        Console.WriteLine(" text=" + err.SourceText);
        Console.WriteLine(" line=" + err.Line);
        Console.WriteLine(" pos=" + err.StreamPosition);
        Console.WriteLine(" col=" + err.LinePosition);
    }

Vous pouvez donc essayer de corriger cette erreur car vous avez toutes les informations requises (y compris la position de la ligne, de la colonne et du flux), mais le processus général de correction (de non détection) des erreurs en HTML est très complexe.


Réponse populaire

Comme indiqué dans une autre réponse, la meilleure solution que j'ai trouvée était de pré-analyser le code HTML afin de convertir les symboles < orphelins < en leur valeur codée HTML &lt; .

return Regex.Replace(html, "<(?![^<]+>)", "&lt;");



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi