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>
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top