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

C# 将所有未为XML预定义的HTML实体转换为unicode,c#,html,xml,unicode,C#,Html,Xml,Unicode,我试图操作一个包含HTML代码的字符串,然后将内容保存到htm文件中。然后将htm文件导入Word文件。目标是将HTML格式的文档附加到Word文档中。这个过程是一个更大的程序的一部分,我不能修改给定的参数 为了方便地修改HTML代码,我认为使用XDocument将是一个好主意。 所以我试了一下: AppendContent(string content, Document doc) { string filePath = ...; //somewhere in /AppData/Loc

我试图操作一个包含HTML代码的字符串,然后将内容保存到htm文件中。然后将htm文件导入Word文件。目标是将HTML格式的文档附加到Word文档中。这个过程是一个更大的程序的一部分,我不能修改给定的参数

为了方便地修改HTML代码,我认为使用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文档的任何大文档,引发异常:

Parse无法解析像nbsp或uuml这样的实体。我已经发现XML只支持一手的预定义实体,因此我必须手动将定义添加到html文件中。这不是一个选项,因为此操作应该适用于任何Html文件

我发现了以下修复:

var decodedContent = WebUtility.HtmlDecode(content);
var xDoc = XDocument.Parse(decodedContent);
这会将所有实体转换为表示字符。所以uuml被转换成u,等等。这一直有效,直到我找到一个包含amp实体的文档,然后转换成&。。。这样的XDocument.Parse又在抱怨了


我正在寻找一种将HTML转换为unicode表示\0x1234或HTML解码的方法,该方法不解码XML预定义实体。

您尝试过HtmlAgilityPack吗?没有。事实上,这解决了我的问题:-谢谢。可能是重复的