Conversion de HTML Agility Pack en XML <script> corruption

c# html-agility-pack linq-to-xml

Question

J'ai un fichier HTML avec un <script> dedans:

<html>
   <script type="application/custom+xml">
   <my><xml><goes><here/></goes></xml></my>
   </script>
</html>

Je l’analyse avec HTML Agility Pack, puis je le convertis au format XML.

<html>
   <script type="application/custom+xml">
   <my><xml><goes><here/></goes></xml></my>
   </script>
</html>

Je souhaite ensuite utiliser LINQ-to-XML pour examiner le contenu de la balise de script qui doit contenir mon XML en tant que CDATA. Mais HTML Agility Pack le perturbe d'une manière ou d'une autre et je me retrouve avec ce XML échappé:

<html>
   <script type="application/custom+xml">
   <my><xml><goes><here/></goes></xml></my>
   </script>
</html>

Est-ce que quelqu'un sait comment je peux dire à HTML Agility Pack de ne pas échapper au contenu de la balise script ?

Réponse acceptée

C'est assez facile, par défaut, AgilityPack est configuré pour traiter le contenu des balises de script comme un CData. Cela se fait dans le constructeur statique de la classe HtmlNode, comme suit:

ElementsFlags.Add("script", HtmlElementFlag.CData);

Pour changer cela, il n'est pas nécessaire de modifier AgilityPack, tout ce dont vous avez besoin est une chose avant votre code, ou juste une fois lorsque votre programme démarre.

ElementsFlags.Add("script", HtmlElementFlag.CData);

Ajoutez juste cela avant votre code, comme ça ça marche pour moi.




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