将未为XML预定义的所有HTML实体转换为unicode

时间:2014-08-27 14:16:52

标签: c# html xml unicode

我正在尝试操作包含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预定义的实体。

0 个答案:

没有答案