2009-06-08 14 views
7

Próbuję użyć Linq do XML, aby zapisać & pobrać niektóre HTML między pliku XML i aplikacji formularzy systemu Windows. Kiedy zapisuje go do pliku XML, znaczniki HTML otrzymują kod XML i nie są zapisywane jako proste HTML.Jak zapisać kod HTML w pliku XML, używając Linq do XML?

Przykład HTML:

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

Zapisane w pliku XML:

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

Kiedy ręcznie edytować plik XML i umieścić w żądanym formacie HTML LINQ ciągnie w HTML i wyświetla go poprawnie.

Oto kod HTML, który zapisuje do pliku 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; 

Przypuszczam, że to się dzieje b/c kodowania xml, ale nie jestem pewien, w jaki sposób radzić sobie z nim. This question dał mi wskazówki ... ale bez odpowiedzi (przynajmniej dla mnie).

Dzięki za pomoc,

Oran

Odpowiedz

5

Ustawienie właściwości wartość zostanie automatycznie zakodować ciąg HTML. To powinno wystarczyć, ale musisz upewnić się, że Twój HTML jest poprawny XML (XHTML).

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

Edit: może trzeba owinąć użytkownik wszedł w <div> </div> tagów HTML. XElement.Parse spodziewa się znaleźć ciąg z co najmniej początkowym i końcowym znacznikiem xml. Tak, to może działać lepiej:

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

Wtedy po prostu trzeba się upewnić, że znaczniki takie jak <br> są wysyłane jako <br />.

Edytuj 2: Inną opcją będzie użycie XML CDATA. Owiń kod HTML za pomocą <![CDATA[ i ]]>, ale nigdy go nie użyłem i nie jestem pewien, jak wpływa to na czytanie xml.

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

Dzięki za odpowiedź. Zadziałało! Ale teraz mam problem z weryfikacją kodu HTML. Używam tej kontroli http://www.codeproject.com/KB/edit/editor_in_windows_forms.aspx , aby umożliwić użytkownikom tworzenie kodu HTML i nie wydaje się, że ma poprawny XHTML. Chyba muszę znaleźć nowy kontrolek HTML, sformatować kod HTML w kodzie lub użyć innej metody, aby zapisać kod HTML w XML. Wszelkie sugestie? – orandov

+0

Próbowałem już owijać kod HTML w tag, ale problem polega na tym, że kontrolka edytora HTML, której używam, generuje nieprawidłowy XHTML – orandov

+2

Dziękuję bardzo Dennis! CData działa! Tutaj jest użycie Linq To XML z CData currentReport.Element ("rekomendacje"). ReplaceNodes (nowy XCData (myRbccallreports.Comments)); – orandov

-1

Spróbuj użyć currentReport.Element("studio").InnerXml zamiast currentReport.Element("studio").Value

+0

Nie widzę InnerXml wymienionych jako członek XElement. http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement_members.aspx – CoderDennis