如何使用 Linq to XML 将 HTML 保存在 XML 文件中?
Posted
技术标签:
【中文标题】如何使用 Linq to XML 将 HTML 保存在 XML 文件中?【英文标题】:How to save HTML in XML file using Linq to XML? 【发布时间】:2010-11-01 07:58:36 【问题描述】:我正在尝试使用 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 给了我一些线索……但没有答案(至少对我来说)。
感谢您的帮助,
奥兰
【问题讨论】:
【参考方案1】:设置 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 + "]]>"));
【讨论】:
感谢您的回答。有效!但是现在我在验证 HTML 时遇到了问题。我正在使用此控件codeproject.com/KB/edit/editor_in_windows_forms.aspx 来允许用户创建 HTML,但它似乎没有有效的 XHTML。我想我必须找到一个新的 HTML 控件,在代码中格式化 HTML 或使用另一种方法将 HTML 保存为 XML。有什么建议吗? 我已经尝试将 html 包装在标签中,但问题是我使用的 HTML 编辑器控件产生了无效的 XHTML 非常感谢丹尼斯! CData 有效!这是 CData currentReport.Element("recomendations").ReplaceNodes(new XCData(myRbccallreports.Comments)); 的 Linq To XML 用法【参考方案2】:尝试使用currentReport.Element("studio").InnerXml
而不是currentReport.Element("studio").Value
【讨论】:
我没有看到 InnerXml 被列为 XElement 的成员。 msdn.microsoft.com/en-us/library/…以上是关于如何使用 Linq to XML 将 HTML 保存在 XML 文件中?的主要内容,如果未能解决你的问题,请参考以下文章