6
votes

Comment éviter System.XML.LINQ.XELEMENT ESPAISSEMENT DE CONTENU HTML?

J'utilise l'objet xelement pour construire du code HTML dans le code-derrière sur une page ASP.NET.

I peut ou non ajouter des xattributes à ce xelement au fur et à mesure que je vais, à la mode suivante: p> xxx pré>

maintenant, si je veux ajouter du contenu dans mydiv em> qui contient html, le xelement échappe automatiquement à ce qui, dans ma situation, n'est pas souhaitable. . P>

Donc, si j'ai: p> xxx pré>

puis je rends cela dans un objet d'espace réservé à l'aide du code suivant: p> xxx PRE>

Lorsque la page se charge, la source révèle que la teneur intérieure à l'intérieur elmnt em> a été échappée et dispose du format suivant dans la source de la page: P>

<span id='content'>hello world</span>


0 commentaires

4 Réponses :


-1
votes

Pourquoi n'utiliseriez-vous pas HTMLTextWriter? xxx


4 commentaires

La classe HTMLTextWriter est marquée comme mustinherit , donc avec mes connaissances limitées, je ne suis pas sûr de la meilleure façon de mettre en place un HTMLTextWriter dans mon objet XElement. Je sais que c'est une grande demande, mais pourriez-vous fournir un court exemple de la façon de convertir (à l'aide de mon exemple ci-dessus) Hello World dans un objet HTMLTextWriter ?


Je devrais également mentionner que je tiens à utiliser la classe de xelement parce que j'utilise un cache sur mesure qui accepte des xéléments, mais je ne sais pas si cela accepte une instance d'un HTMLTextWriter. En outre, suggérez-vous que je remplace l'ensemble du xelement avec un HTMLTextWriter plutôt que d'utiliser cela pour contenir simplement le HTML intérieur?


@awj Voir mon message mis à jour sur l'utilisation. Je ne comprends pas ce que vous devez parler, mais de toute façon, cette classe est publique et déjà implémentée.Je suggère que pour la construction de HTML, HTMLTextWriter est beaucoup plus simple et puissant que le xelement. XElement est plus général


S'il vous plaît voir mon commentaire ci-dessous le prochain message sur la raison pour laquelle je veux utiliser le xelement, bien que j'apprécie beaucoup l'exemple. Le HTMLTextWriter conviendrait si je voulais simplement concaténer des éléments HTML, mais comme j'écris ci-dessous, je souhaite mettre en cache l'objet (xelement est sérialisable) et la teneur intérieure contenant le HTML - sort d'un CMS.



0
votes

Si vous traitez le HTML comme XML, alors lorsque vous l'ajoutez, vous devez ajouter XML

Ainsi, vous feriez une nouvelle xmlelement (Span), ajouter un attribut (pour l'identifiant d'attribut, le contenu de la valeur), puis définir son contenu sur "Hello World". Prenez ce xmelement et ajoutez-le à l'arbre au bon endroit.

Tout cela semble aller dans la mauvaise direction pour moi. Si vous souhaitez pouvoir avoir du contenu "dynamique" dans le code derrière je suggérerais: Ajout d'un ASP: étiquette ou APS: espace réservoir Contrôle de la page puis réglage le contenu de ce contrôle au HTML dans le code derrière. C'est la manière standard d'ajouter du contenu dynamique.


3 commentaires

La raison pour laquelle je consomme le contenu de cette façon est que je veux cacher des éléments de la page - pour que cela se produise, ces éléments doivent être sérialisables. Le contenu à l'intérieur du xelement provient d'un champ HTML dans un CMS. J'espère que cela explique à tous les lecteurs de ma question pourquoi je cherche à obtenir un résultat en utilisant le xelement pour contenir HTML.


@awj - rien de mal avec ça. Un ASP: espace réservé pourrait gérer une chaîne de votre base de données tout à fait. Rien n'est plus sérialisable qu'une chaîne.


@awj - en fait un ASP: littéralcontrol ou ASP: étiquette est probablement ce que vous voulez. Voulez-vous que je pose un exemple de comment l'utiliser?



0
votes

J'ai résolu ceci en utilisant le fichier HTMLAGILity pour convertir la chaîne de HTML en un objet hiérarchique.

J'ai ensuite bouclé à travers chaque élément HTML de cet objet et créé un xelement imbriqué pour chacun.

Il y a un peu de vérification qui a besoin de ces besoins sur chaque élément, mais cela fonctionne parfaitement et comporte moins de lignes de code que je m'attendais lorsque j'ai commencé à le construire.


0 commentaires

10
votes
 var elmnt = new XElement("div",
   new XAttribute("id", "myDiv"),
   new XRaw("<span id='content'>hello world</span>")
 );


public class XRaw : XText
{
  public XRaw(string text):base(text){}
  public XRaw(XText text): base(text){}

  public override void WriteTo(System.Xml.XmlWriter writer)
  {
    writer.WriteRaw(this.Value);
  }
}

0 commentaires