HtmlAgilityPack produce tag di chiusura mancanti in OuterHtml

c# html html-agility-pack

Domanda

Sto usando HtmlAgilityPack per analizzare e manipolare il testo html. Tuttavia sembra che DocumentNode.OuterHtml dia mancati tag di chiusura.

Per isolare il problema ora non sto facendo nient'altro, solo analizzare e ottenere OuterHtml (nessuna manipolazione):

var document = new HtmlDocument();
document.LoadHtml(myHtml);
result = document.DocumentNode.OuterHtml;

Originale: (myHtml)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="X-UA-Compatible" content="IE=Edge" /><title>
     MyTitle
</title>

OutputHtml: (risultato) Si noti che meta elemento non è chiuso

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="X-UA-Compatible" content="IE=Edge"><title>
    MyTitle
</title>

Allo stesso modo tutti gli elementi di input e img sono aperti. (Si prega di non rispondere che non dovrebbe essere un problema. Beh, non dovrebbe essere, ma lo è.) Chrome non può rendere correttamente la pagina. Continua a leggere.

Cosa c'è di più strano:

Originale: (myHtml)

    <option value="10">Afrikaans</option>
    <option value="11">Albanian</option>
    <option value="12">Arabic</option>
    <option value="13">Armenian</option>
    <option value="14">Azerbaijani</option>
    <option value="15">Basque</option>

OutputHtml: (risultato) Si noti che mancano i tag di chiusura espliciti completi

    <option value="10">Afrikaans
    <option value="11">Albanian
    <option value="12">Arabic
    <option value="13">Armenian

Utilizzo del pacchetto NuGet più recente di HtmlAgilitPack: id = "HtmlAgilityPack" version = "1.4.9"

Risposta accettata

Ci sono diverse opzioni che è possibile impostare quando si carica il documento.

OptionAutoCloseOnEnd

Definisce se la chiusura per nodi non chiusi deve essere effettuata alla fine o direttamente nel documento. L'impostazione su true può effettivamente cambiare il modo in cui i browser eseguono il rendering della pagina.

document = new HtmlDocument();
document.OptionAutoCloseOnEnd = true;
document.LoadHtml(content);

Fonti correlate che vale la pena leggere:

Tag di chiusura dell'opzione HtmlAgilityPack Drops

Il tag immagine non si chiude con HTMLAgilityPack



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow