2017-05-25 1 views
3

Je suis en train de charger html simple:HtmlAgilityPack loadHTML - Problème avec les balises vides P

var html = "<div>something<p></p></div>"; 

var doc = new HtmlDocument(); 
doc.LoadHtml(html); 

Après le chargement de ce HTML doc.InnerHtml sorties ceci:

<div>something<p></div> 

Donc, comme vous pouvez le voir perd la fermeture P tag et je me suis foiré HTML.

Je ne trouve pas de solution pour cela, quelqu'un peut-il m'aider s'il vous plaît.

+3

Vous pouvez utiliser 'doc.OptionWriteEmptyNodes = true' pour obtenir' '

something

haim770

+3

Je marqué dupe, mais après plus recherche, j'ai rouvert parce que ce n'est pas un bug. C'est une fonctionnalité (oui, vraiment), et la sortie n'est pas "foiré". Dans ce cas particulier, la balise de fermeture est facultative. Rappelez-vous que HTML n'est pas XML. [*** "La balise de début est obligatoire La balise de fin peut être omise (.......) s'il n'y a plus de contenu dans l'élément parent et l'élément parent n'est pas un élément ." *** ] (https://developer.mozilla.org/en/docs/Web/HTML/Element/p) Le code HTML que vous avez publié répond à ces exigences. – spender

+0

@ haim770 Merci, cela résout mon problème. Si vous voulez l'écrire comme réponse, je peux l'accepter. – carpics

Répondre

1

Le drapeau OptionWriteEmptyNodes est ce que vous cherchez:

Détermine si les noeuds vides doivent être écrits comme fermé pendant la sortie.

Et dans votre cas:

doc.OptionWriteEmptyNodes = true; 

Rendement:

<div>something<p /></div>