Perdere il segno "minore di" in HtmlAgilityPack loadhtml

c# html html-agility-pack

Domanda

Recentemente ho iniziato a sperimentare con HtmlAgilityPack. Non ho familiarità con tutte le sue opzioni e penso che sto facendo qualcosa di sbagliato.

Ho una stringa con il seguente contenuto:

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

Vedi che nel mio periodo ho un segno "meno di". Elaboro questa stringa con il seguente codice:

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

Ma quando faccio uno sguardo veloce e sporco nell'arco di tempo come questo:

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

Vedo che lo span è vuoto.

Quale opzione devo impostare per mantenere il segno "minore di". Ho già provato questo:

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

ma senza successo.

So che HTML non è valido. Lo sto utilizzando per correggere l'HTML non valido e utilizzare HTMLEncode sui segni "meno di"

Per favore indirizzami nella giusta direzione. Grazie in anticipo

Risposta accettata

Html Agility Packs rileva questo come un errore e crea un'istanza HtmlParseError per esso. È possibile leggere tutti gli errori utilizzando ParseErrors della classe HtmlDocument. Quindi, se esegui questo codice:

    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);
    }

Verrà visualizzato questo (prima il testo corretto e dettagli sull'errore):

    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);
    }

Quindi puoi provare a correggere questo errore, dato che hai tutte le informazioni richieste (tra cui riga, colonna e posizione del flusso) ma il processo generale di correggere (non rilevare) gli errori in HTML è molto complesso.


Risposta popolare

Come menzionato in un'altra risposta, la soluzione migliore che ho trovato è stata la pre-analisi del codice HTML per convertire < simboli orfani < con il loro valore codificato HTML &lt; .

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché