我正在尝试使用 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给了我一些线索……但没有答案(至少对我而言)。
感谢您的帮助,
奥兰
最佳答案
设置 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 + "]]>"));
关于c# - 如何使用 Linq to XML 将 HTML 保存在 XML 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/967433/