HtmlAgilityPack produit des balises de fermeture manquantes en OuterHtml

c# html html-agility-pack

Question

J'utilise HtmlAgilityPack pour analyser et manipuler du texte HTML. Cependant, il semble que DocumentNode.OuterHtml donne des balises de fermeture manquantes.

Pour isoler le problème maintenant, je ne fais rien d'autre que d'analyser et d'obtenir le OuterHtml (pas de manipulation):

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

Original: (myHtml)

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

OutputHtml: (résultat) Notez que l'élément meta n'est pas fermé

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

De même, tous les éléments input et img sont laissés ouverts. (Merci de ne pas répondre que cela ne devrait pas être un problème. Eh bien, cela ne devrait pas l'être, mais c'est le cas.) Chrome ne peut pas restituer correctement la page. Continue de lire.

Quoi de plus bizarre:

Original: (myHtml)

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

OutputHtml: (result) Notez que les balises de fermeture explicites complètes sont manquantes.

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

Utilisation du dernier package NuGet avec HtmlAgilitPack: id = "HtmlAgilityPack" version = "1.4.9"

Réponse acceptée

Vous pouvez définir plusieurs options lorsque vous chargez le document.

OptionAutoCloseOnEnd

Définit si la fermeture des nœuds non fermés doit être effectuée à la fin ou directement dans le document. Définir ceci sur true peut réellement changer la façon dont les navigateurs rendent la page.

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

Sources connexes à lire:

HtmlAgilityPack Drops Tags de fin d'option

La balise d'image ne se ferme pas avec HTMLAgilityPack




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