2009-06-08 86 views
7

我正在嘗試使用Linq將XML保存&在XML文件和Windows窗體應用程序之間檢索一些HTML。當它將其保存到XML文件時,HTML標記將被xml編碼,並且不會保存爲直接的HTML。如何使用Linq將XML保存爲XML文件?

示例HTML:

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

在XML文件中保存:

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

當我手動編輯XML文件,並放置在所需的HTML LINQ的拉在HTML並正確顯示。

這裏是保存HTML到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; 

我認爲這正在發生B/C XML編碼的,但我不知道該如何處理它。 This question給了我一些線索......但沒有答案(至少對我來說)。

感謝您的幫助,

奧蘭

回答

5

設置Value屬性將自動編碼的HTML字符串。這應該可以做到,但是你需要確保你的HTML是有效的XML(XHTML)。

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

編輯:您可能需要包裹用戶<div> </div>標籤進入HTML。 XElement.Parse希望能找到一個至少有一個開始和結束xml標籤的字符串。所以,這可能會更好地工作:

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

然後你只需要確保像<br>標籤被髮送作爲<br />

編輯2:其他選項將使用XML CDATA。用<![CDATA[]]>包裝HTML,但我從來沒有真正使用過,我不確定它是如何影響讀取XML的。

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

謝謝你的答案。有效!但是現在我遇到了驗證HTML的問題。我正在使用這個控件http://www.codeproject.com/KB/edit/editor_in_windows_forms.aspx 來允許用戶創建HTML,並且它似乎沒有有效的XHTML。我想我必須找到一個新的HTML控件,在代碼中格式化HTML或使用另一種方法將HTML保存爲XML。 有何建議? – orandov 2009-06-08 23:46:42

-1

嘗試使用currentReport.Element("studio").InnerXml,而不是currentReport.Element("studio").Value

+0

我沒有看到InnerXml列爲XElement的成員。 http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement_members.aspx – CoderDennis 2009-06-08 23:08:35