我正在尝试使用Linq to XML来保存&在XML文件和Windows窗体应用程序之间检索一些HTML。当它将其保存到XML文件时,HTML标记将被编码为xml,并且不会保存为直接HTML。
示例HTML:
<P><FONT color=#004080><U>Sample HTML</U></FONT></P>
保存在XML文件中:
<P><FONT color=#004080><U>Sample HTML</U></FONT></P>
当我手动编辑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;
我认为这是发生了xml编码的b / c,但我不知道如何处理它。 This question给了我一些线索......但没有答案(对我而言,至少)。
感谢您的帮助,
奥兰
答案 0 :(得分:5)
设置Value属性将自动编码html字符串。这应该可以解决问题,但您需要确保HTML是有效的XML(XHTML)。
currentReport.Element("recomendations").ReplaceNodes(XElement.Parse(myCallreports.Comments));
修改:您可能需要将用户输入的HTML包装在<div> </div>
标记中。 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 + "]]>"));
答案 1 :(得分:-1)
尝试使用currentReport.Element("studio").InnerXml
代替currentReport.Element("studio").Value