2009-06-08 16 views
7

Linq to XMLを使用して&のXMLファイルとWindowsフォームアプリケーションの間でHTMLを取得しようとしています。 XMLファイルに保存すると、HTMLタグはxmlエンコードされ、ストレートHTMLとして保存されません。XMLをLinqを使ってXMLファイルに保存する方法は?

例HTML:

XMLファイルに保存
<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; 

私は手動でXMLファイルを編集して、LINQのは、HTMLに引き、それを適切に表示したいHTMLに入れます。私は、これはXMLエンコーディングのC/Bが起きていると仮定し

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; 

が、私はそれに対処する方法を確認していない。ここで

は、XMLファイルにHTMLを保存したコードです。 This question私にいくつかの手がかりを与えましたが、答えはありませんでした(私にとっては、少なくとも)。助けのための

おかげで、

オラン

答えて

5

currentReport.Element("studio").InnerXmlを使用してみてください。これはすべきことですが、HTMLが有効なXML(XHTML)であることを確認する必要があります。

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

編集:あなたはユーザーをラップする必要があるかもしれません<div> </div>タグでHTMLに入りました。 XElement.Parseは、少なくとも開始タグと終了タグを持つ文字列を見つけることを想定しています。だから、これは良い仕事かもしれません:

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でコードをフォーマットしたり、XMLでHTMLを保存するために別のメソッドを使わなければならないと思います。 提案がありますか? – orandov

+0

私はすでにタグでhtmlをラップしようとしましたが、問題は、使用しているHTMLエディタコントロールが無効なXHTMLを生成していることです。 – orandov

+2

ありがとうDennis! CData作品!ここでは、CData currentReport.Element( "recomendations")のLinq To XML使用法を示します。ReplaceNodes(new XCData(myRbccallreports.Comments)); – orandov

-1

は自動的にHTML文字列をエンコードしますValueプロパティを設定する代わりにcurrentReport.Element("studio").Value

+0

InnerXmlがXElementのメンバーとして表示されません。 http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement_members.aspx – CoderDennis

関連する問題