2009-06-08 9 views
7

J'essaie d'utiliser Linq en XML pour enregistrer & récupérer du code HTML entre un fichier XML et une application Windows Forms. Lorsqu'il l'enregistre dans le fichier XML, les balises HTML sont codées en XML et ne sont pas enregistrées en HTML.Comment enregistrer du HTML dans un fichier XML en utilisant Linq to XML?

Exemple HTML:

<P><FONT color=#004080><U>Sample HTML</U></FONT></P> 

enregistré dans le fichier XML:

&lt;P&gt;&lt;FONT color=#004080&gt;&lt;U&gt;Sample HTML&lt;/U&gt;&lt;/FONT&gt;&lt;/P&gt; 

Lorsque je modifier manuellement le fichier XML et mis dans le code HTML désiré LINQ tire dans le code HTML et affiche correctement.

Voici le code qui enregistre le HTML dans le fichier XML:

XElement currentReport = (from item in callReports.Descendants("callReport") 
            where (int)item.Element("localId") == myCallreports.LocalId 
            select item).FirstOrDefault(); 

     currentReport.Element("studio").Value = myCallreports.Studio; 
     currentReport.Element("visitDate").Value = myCallreports.Visitdate.ToShortDateString(); 
     // *** The next two XElements store the HTML 
     currentReport.Element("recomendations").Value = myCallreports.Comments; 
     currentReport.Element("reactions").Value = myCallreports.Ownerreaction; 

Je suppose que cela se passe b/c de l'encodage XML, mais je ne suis pas sûr de savoir comment faire face. This question m'a donné quelques indices ... mais pas de réponse (pour moi, au moins).

Merci pour l'aide,

Oran

Répondre

5

Définition de la propriété de valeur encoder automatiquement la chaîne html. Cela devrait faire l'affaire, mais vous devrez vous assurer que votre HTML est un code XML valide (XHTML).

currentReport.Element("recomendations").ReplaceNodes(XElement.Parse(myCallreports.Comments)); 

Edit: Vous devrez peut-être envelopper l'utilisateur est entré HTML dans <div> </div> tags. XElement.Parse s'attend à trouver une chaîne avec au moins une balise xml de début et de fin. Donc, cela pourrait fonctionner mieux:

currentReport.Element("recomendations").ReplaceNodes(XElement.Parse("<div>" + myCallreports.Comments + "</div>")); 

Il vous suffit de vous assurer que les balises comme <br> sont envoyés en tant que <br />.

Édition 2: L'autre option utiliserait XML CDATA. Envelopper le code HTML avec <![CDATA[ et ]]>, mais je n'ai jamais utilisé cela et je ne sais pas comment cela affecte la lecture du fichier XML.

currentReport.Element("recomendations").ReplaceNodes(XElement.Parse("<![CDATA[" + myCallreports.Comments + "]]>")); 
+0

Merci pour la réponse. Ça a marché! Mais maintenant j'ai un problème pour valider le HTML. J'utilise ce contrôle http://www.codeproject.com/KB/edit/editor_in_windows_forms.aspx pour permettre aux utilisateurs de créer le code HTML et il ne semble pas avoir XHTML valide. Je suppose que je dois trouver un nouveau contrôle HTML, formater le HTML dans le code ou utiliser une autre méthode pour enregistrer le HTML en XML. Des suggestions? – orandov

+0

J'avais déjà essayé d'envelopper le html dans une balise mais le problème est que le contrôle de l'éditeur HTML que j'utilise produit un code XHTML non valide – orandov

+2

Merci beaucoup Dennis! CData fonctionne! Voici l'utilisation Linq To XML de CData currentReport.Element ("recomendations"). ReplaceNodes (new XCData (myRbccallreports.Comments)); – orandov

-1

Essayez d'utiliser currentReport.Element("studio").InnerXml au lieu de currentReport.Element("studio").Value

+0

Je ne vois pas InnerXml répertorié en tant que membre de XElement. http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement_members.aspx – CoderDennis

Questions connexes