2009-06-08 49 views
7

& kaydetmek için bir XML dosyası ve bir windows form uygulaması arasında bir HTML almak için Linq to XML kullanmaya çalışıyorum. XML dosyasına kaydettiğinde, HTML etiketleri xml olarak kodlanır ve düz HTML olarak kaydedilmez.XML XML dosyasında XML ile XML nasıl kaydedilir?

örnek HTML:

XML dosyası içinde Kaydedilen
<P><FONT color=#004080><U>Sample HTML</U></FONT></P> 

:

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

el XML dosyasını düzenlemek ve Linq HTML çeker ve düzgün görüntüler istenen HTML koydu. Bu xml kodlama b/c oluyor varsayalım

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; 

ama onunla nasıl başa emin değilim: Burada

XML dosyasına HTML kaydeder koddur. This question bana bazı ipuçları verdi ... ama cevap yok (benim için, en azından). Yardım için

sayesinde

Oran

cevap

5

ait currentReport.Element("studio").InnerXml kullanmayı deneyin. Bu hile yapmalı, ancak HTML'nizin geçerli XML olduğundan emin olmanız gerekir (XHTML).

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

Düzenleme: Kullanıcı <div> </div> etiketleri HTML girmiş sarmak gerekebilir. XElement.Parse, en az başlangıç ​​ve bitiş xml etiketine sahip bir dize bulmayı umuyor. Yani, bu daha iyi çalışabilir:

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

Sonra sadece <br> gibi etiketleri <br /> olarak gönderildiğine dair emin olmalıyız.

Düzen 2: Diğer seçenek XML CDATA kullanılacaktır. HTML'yi <![CDATA[ ve ]]> ile sarın, ancak bunu hiç kullanmadım ve xml değerini nasıl etkilediğinden emin değilim.

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

Cevabınız için teşekkürler. İşe yaradı! Ama şimdi HTML'yi doğrulayan bir sorun yaşıyorum. Kullanıcıların HTML oluşturmasına izin vermek için bu denetimi http://www.codeproject.com/KB/edit/editor_in_windows_forms.aspx kullanıyorum ve geçerli XHTML'ye sahip görünmüyor. Sanırım yeni bir HTML kontrolü bulmalıyım, HTML'yi kod içinde biçimlendirmeliyim ya da HTML'yi XML'de kaydetmek için başka bir yöntem kullanmalıyım. Herhangi bir öneriniz var mı? – orandov

+0

Html'yi bir etikete sarmayı denedim ancak sorun şu an kullandığım HTML Editor denetimi geçersiz XHTML – orandov

+2

üretiyor Çok teşekkürler Dennis! CData çalışıyor! İşte CData currentReport.Element ("recomendations") Linq To XML kullanımı. ReplaceNodes (yeni XCData (myRbccallreports.Comments)); – orandov

-1

otomatik html dize kodlar Değer özelliğinin ayarlanması yerine currentReport.Element("studio").Value

+0

InnerXml öğesini XElement öğesinin üyesi olarak göremiyorum. http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement_members.aspx – CoderDennis