我正在尝试操作包含HTML-Code的字符串,然后将内容保存到htm文件中。然后将htm文件导入到Word文件中。目标是将以HTML格式化的文档附加到Word文档中。这个过程是一个更大的程序的一部分,我无法修改给定的参数。
为了轻松修改HTML-Code,我认为使用XDocument会是一个好主意 所以我尝试了这个:
AppendContent(string content, Document doc)
{
string filePath = ...; //somewhere in /AppData/Local
var xDoc = XDocument.Parse(content);
// code left out because irrelevant
// Finding all "img" elements, in order to
// extract the embedded picture and save it as external file
FileHelper.SaveToFile(filePath, xDoc.ToString());
//... After this, the file is appended to the word file (the one in doc)
}
第一次尝试实际上是用一个小的测试html。使用我试图附加到word文档的任何大文档,都会导致抛出异常:
XDocument.Parse无法解析像“nbsp”或“uuml”(德语ü)这样的实体。我已经发现XML只支持一个充满预定义实体的手,所以我必须手动将定义添加到html文件中。这不是一个选项,因为此操作应该适用于任何Html文件。
我找到了以下修复:
var decodedContent = WebUtility.HtmlDecode(content);
var xDoc = XDocument.Parse(decodedContent);
这会将所有实体转换为代表字符。因此“uuml”被转换为“ü”等。这一直有效,直到我点击包含“amp”实体的文档,然后将其转换为“&”......并且这样的XDocument.Parse再次抱怨。
我正在寻找一种方法将HTML转换为unicode-representation(“\ 0x1234”)或HTML解码,它不会解码XML预定义的实体。