如何使用 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 文件中:

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

当我手动编辑 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 包装在 &lt;div&gt; &lt;/div&gt; 标记中。 XElement.Parse 期望找到一个至少有一个开始和结束 xml 标记的字符串。所以,这可能会更好:

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

那么你只需要确保像&lt;br&gt;这样的标签是以&lt;br /&gt;的形式发送的。

编辑 2: 另一个选项是使用 XML CDATA。用 &lt;![CDATA[]]&gt; 包装 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 文件中?的主要内容,如果未能解决你的问题,请参考以下文章

如何/我可以使用 linq to xml 以合理的内存消耗查询巨大的 xml 文件?

如何使用 linq-to-xml 查询简化此功能?

如何使用 LINQ to XML 获取属性值?

C# linq to Xml(复习用)

Linq to XML 增删改查

LINQ to XML简介