2009-06-08 12 views
7

Sto cercando di utilizzare Linq in XML per salvare & recuperare un codice HTML tra un file XML e un'applicazione Windows Form. Quando lo salva nel file XML, i tag HTML vengono codificati in xml e non vengono salvati come HTML diretto.Come salvare l'HTML nel file XML usando Linq in XML?

Esempio HTML:

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

salvato in un file XML:

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

Quando ho modificare manualmente il file XML e messo in HTML desiderato il Linq tira nel codice HTML e lo visualizza correttamente.

Qui è il codice che salva il codice HTML per il file 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; 

Presumo che ciò sta accadendo b/c di codifica XML, ma io non sono sicuro di come trattare con essa. This question mi ha dato alcuni indizi ... ma nessuna risposta (almeno per me).

Grazie per l'aiuto,

Oran

risposta

5

Impostare la proprietà Value codificherà automaticamente la stringa di codice HTML. Questo dovrebbe fare il trucco, ma dovrai assicurarti che il tuo HTML sia XML valido (XHTML).

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

Edit: Potrebbe essere necessario avvolgere l'utente ha inserito nel codice HTML <div> </div> tag. XElement.Parse prevede di trovare una stringa con almeno un tag xml iniziale e finale. Così, questo potrebbe funzionare meglio:

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

Poi devi solo fare in modo che i tag come <br> vengono inviati come <br />.

Modifica 2: L'altra opzione potrebbe essere utilizzata XML CDATA. Racchiude l'HTML con <![CDATA[ e ]]>, ma in realtà non l'ho mai usato e non sono sicuro di come influenzi la lettura dell'XML.

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

Grazie per la risposta. Ha funzionato! Ma ora sto riscontrando un problema nella convalida dell'HTML. Sto usando questo controllo http://www.codeproject.com/KB/edit/editor_in_windows_forms.aspx per consentire agli utenti di creare l'HTML e non sembra avere XHTML valido. Credo di dover trovare un nuovo controllo HTML, formattare l'HTML nel codice o utilizzare un altro metodo per salvare l'HTML in XML. Qualche suggerimento? – orandov

+0

Avevo già provato a racchiudere l'html in un tag, ma il problema è che il controllo HTML Editor che sto usando produce XHTML non valido – orandov

+2

Grazie mille Dennis! CData funziona! Ecco l'uso di Linq To XML di CData currentReport.Element ("raccomandazioni") ReplaceNodes (nuovo XCData (myRbccallreports.Comments)); – orandov

-1

Cercare di utilizzare currentReport.Element("studio").InnerXml invece di currentReport.Element("studio").Value

+0

Non vedo InnerXml elencato come membro di XElement. http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement_members.aspx – CoderDennis