Conversion XElement à chaîne HTML
Question
J'effectue des opérations XML sur un document XHTML utilisant Xml et LINQ.
Lors de la conversion de nouveau à une chaîne pour la sortie à un navigateur, il rend les balises de script dans leur forme originale fournie lors de la création du XElement comme
<script />
.
qui l'empêche d'être traitée correctement par la plupart des navigateurs sur le marché.
Je voudrais effectuer la conversion XElement à cordes d'une manière qu'il génère la balise de script comme celui-ci <script></script>
aide quelqu'un peut me à ce sujet? Merci d'avance. :)
Tout d'abord modifier
Fournir un peu plus d'informations, les données proviennent d'un champ XML dans une base de données MSSQL 2008R2.
Il est chargé à partir du champ XML
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js" />
Deuxième édition échantillon de travail
using System;
using System.Linq;
using System.Xml.Linq;
namespace Test1
{
class Test1
{
static void Main(string[] args)
{
XElement element = XElement.Parse("<div><script /><script>Test</script></div>");
var EmptySet = (from e in element.DescendantsAndSelf()
where e.IsEmpty
select e);
foreach(XElement e in EmptySet)
{
e.Value = String.Empty;
}
Console.WriteLine(element.ToString(SaveOptions.None));
}
}
}
Et ses résultats
<div>
<script></script>
<script>Test</script>
</div>
La solution
Avez-vous essayé d'utiliser SaveOptions.DisableFormatting
?
Je ne peux pas reproduire réellement le problème, l'esprit vous ... ce que les opérations XML vous exécutez? Créez-vous vous-même élément de script
? Cela fonctionne bien:
using System;
using System.Xml.Linq;
class Test
{
static void Main()
{
XElement element = XElement.Parse("<script></script>");
// Both of these write <script></script>
Console.WriteLine(element.ToString(SaveOptions.None));
Console.WriteLine(element.ToString(SaveOptions.DisableFormatting));
}
}
(XDocument.Save
et XElement.Save
ont les mêmes options.)
EDIT: Pour changer un élément sans nœuds enfants en un seul avec un seul nœud de texte vide, vous pouvez simplement mettre element.Value
à « ». Par exemple:
XElement element = XElement.Parse("<script />");
Console.WriteLine(element.ToString()); // Prints <script />
element.Value = "";
Console.WriteLine(element.ToString()); // Prints <script></script>
Autres conseils
Utilisation
XElement.Save(XmlWriter writer)
alors que la sortie d'un XmlWriter vous utilisez StringWriter est rapide et fiable obtenir ce que vous voulez.