C# 使用Microsoft.mshtml解析HTML

C# 使用Microsoft.mshtml解析HTML,c#,html,mshtml,C#,Html,Mshtml,因此,我尝试使用mshtml解析少量的html。但是我有一些问题。我需要从IHtmlElement中获取innerHtml。首先,我创建一个IHtmlDocument2对象,并获取我称之为root的主span标记(环绕所有内容),如下所示 string html = someHtml; object[] objects = { html }; mshtml.HTMLDocument doc = new mshtml.HTMLDocument(); mshtml.IHTMLDocument

因此,我尝试使用
mshtml
解析少量的html。但是我有一些问题。我需要从
IHtmlElement
中获取
innerHtml
。首先,我创建一个
IHtmlDocument2
对象,并获取我称之为root的主span标记(环绕所有内容),如下所示

 string html = someHtml;
 object[] objects = { html };
 mshtml.HTMLDocument doc = new mshtml.HTMLDocument();
 mshtml.IHTMLDocument2 doc2 = (mshtml.IHTMLDocument2)doc;
 doc2.write(objects);
 mshtml.IHTMLElement root = doc.getElementById("root");
然后,我将遍历“root”的子对象,并对innerHtml进行类似的处理

foreach (mshtml.IHTMLElement e in  (mshtml.IHTMLElementCollection)root.children)
{
    someString = e.innerHtml.substring(0, 1);
    //or something similar  
}

这个很好用。但是,当元素
innerHtml
包含
或任何自动关闭标记(如

)时,我会遇到问题。我遇到的问题是,当html标记的innerHtml包含其中一个时,
IHtmlElement
对象中的
innerHtml
没有设置,并且保持为空。有办法解决这个问题吗?我发现很难相信mshtml不能处理这些类型的基本html标记。所以我觉得我做错了什么。如果您尝试通过IPersistFile或IPersistStreamInit?负加载您的想法、评论和反馈,我们将不胜感激。这是我第一次听说这些接口,所以我不知道它们是如何工作的。我能够为我正在使用它的选定案例构建一个变通方法,但这不是一个理想的情况。我认为这两种方法都不适用于我的情况。我正在解析的HTML代码不是来自文件或流。它存储在数据库中。然后在解析之前将其作为字符串对象检索