La Sérialisation XML de HTML

D'accord avec ça on l'a FAIT! Merci à vous tous!

public class Result
{
    public String htmlEscaped
    {
        set;
        get;
    }

    [XmlIgnore]
    public String htmlValue
    { set; get; }

    [XmlElement("htmlValue")]
    public XmlCDataSection htmlValueCData
    {
        get
        {
            XmlDocument _dummyDoc = new XmlDocument();
            return _dummyDoc.CreateCDataSection(htmlValue);
        }
        set { htmlValue = (value != null) ? value.Data : null; }
    }
}

    Result r = new Result();
    r.htmlValue = ("<b>Hello</b>");
    r.htmlEscaped = ("<b>Hello</b>");
    XmlSerializer xml = new XmlSerializer(r.GetType());
    TextWriter file = new StreamWriter(Environment.CurrentDirectory + "\\results\\result.xml", false, System.Text.Encoding.Default);
    xml.Serialize(file, r);
    file.Close();

RÉSULTAT:

<?xml version="1.0" encoding="Windows-1252"?>
<Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <htmlEscaped>&lt;b&gt;Hello&lt;/b&gt;</htmlEscaped>
  <htmlValue><![CDATA[<b>Hello</b>]]></htmlValue>
</Result>

Comme vous pouvez le voir, après CDATA est le type de retour, pas plus échappé html dans le fichier XML sur le système de fichiers.
La Sérialisation JSON n'est pas de travailler plus, mais cela peut être corrigé avec un peu de type de l'extension.


LA QUESTION ÉTAIT:

Peut-être quelqu'un sait comment faire...

J'ai cette Classe:

public class Result
{
    public String htmlValue
    {
        get;
        set;
    }
}

Je l'utilise pour sérialiser XML

Result res = new Result();
res.htmlValue = "<p>Hello World</p>";
XmlSerializer s = new XmlSerializer(res.GetType());
TextWriter w = new StreamWriter(Environment.CurrentDirectory + "\\result.xml", false, System.Text.Encoding.Default);
s.Serialize(w, res);
w.Close();

Fonctionne très bien j'obtiens ceci:

<?xml version="1.0" encoding="Windows-1252"?>
<Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <htmlValue>&lt;b&gt;Hello World&lt;/b&gt;</htmlValue>
</Result>

Que peut-dois-je changer pour obtenir ceci:

<?xml version="1.0" encoding="Windows-1252"?>
<Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <htmlValue><![CDATA[<b>Hello World</b>]]></htmlValue>
</Result>

J'ai déjà cherché mais je ne trouve rien. Le type de htmlValue
rester Chaîne, parce que d'autres Serialisations JSON, etc.

Difficile... Merci d'avance pour les suggestions

  • HTML est correct, dans le String en C#. Pourquoi décoder ou à coder?
  • XmlSerializer enregistré le HTML échappé de fichier XML.
  • N'utilisez pas le C# pour la consommation.

Est outil externe qui acceptent le présent:

<htmlValue><![CDATA[<b>Hello World</b>]]></htmlValue>

mais pas

<htmlValue>&lt;b&gt;Hello World&lt;/b&gt;</htmlValue>

Je fais la même chose avec JSON Sérialiseur, dans le fichier sur le disque dur de l'HTML est enregistré correcte.
Pourquoi et où l'utilisation de HTTP Utilitaire pour éviter cela? Et comment obtenir de l' <![CDATA[ ]]> autour d'elle.

Pouvez-vous donner un exemple de code?
Existe-il d'autres Sérialiseur que le C#?

J'ai trouvé ce Lien .NET Sérialisation XML d'CDATA ATTRIBUT de Marco André Silva, qui ne j'ai besoin de le faire, mais c'est différent, comment inclure ce, sans changer de Nature?

Pourquoi s'en faire? Les deux sont identiques du point de vue sémantique.
Becourse l'outil de les consommer, ne l'aime pas. Sur d'abord sur elle montre le Texte HTML. Sur la 2e, il affiche "Hello World" en gras. Je ne peux pas changer de consommer de l'outil.
Ensuite, il ya quelque chose de mal avec l'outil, puisque vous n'avez pas <b>Hello World</b> donc il ne devrait pas être gras.
Jean "Si l'outil accepte la CDATA version mais pas la version échappée, puis l'outil a une fatale bug qui doit être corrigé. Les deux sont sematically XML identiques. Peut-être l'outil ne permet pas de comprendre XML? Au-delà, je ne comprends pas votre question. Aussi, le C# est un langage de programmation. Il n'a pas de sérialiseurs à tous. Vous avez l'air de référence .NET sérialiseurs, et il vous arrive de les utiliser à partir du langage de programmation C#." Droit, mais pourquoi est-il de toute façon une Balise CDATA sur le Standard XML? Si il y a une autre façon de créer des Fichiers XML en C# de Classes.. ouverte à toute Solution.
ups...<p> doit être <b>, fixe en question. s'est vraiment passé sur la création de l'exemple, le problème est toujours le même. Consommer de l'Outil ne peut pas être changé productif et de l'entreprise fait, c'est parti!

OriginalL'auteur csharpnoob | 2009-10-01