2

我想在 Web 浏览器上显示 DOM,其中包含所有注释和 html、head、body 等。保留其结构。目前,我只能从节点 html 开始。Document.All 没有帮助。我能看到的唯一方法是 webBrowser1.Document.Body 但我会错过评论、头部等。然后如果我使用 Document.All 那么这给了我所有的节点。

4

4 回答 4

1

我认为使用 WebBrowser 控件获得所需内容的唯一选择是使用Document.All. 尽管这不仅为所有元素提供了顶级元素,但每个元素都有一个.Parent元素属性,因此您可以遍历它们(或使用 Linq)并仅获取具有<body><head>作为父元素的元素。

于 2012-09-15T09:13:08.997 回答
0

您应该能够查询(某处有一个属性)特定项目是否有子节点,您还可以查询它是否是父节点或特定项目是否有父节点,以及是否有,丢弃,并且您可以继续查询诸如 item.parent.parent 之类的父级(请检查智能感知以获取确切的对象/属性名称),如果它不返回任何内容,则意味着只有一个父级(假设 item.parent 不返回任何内容) ,并且您可以组织节点可以/必须有多深。因此,根据子项或父项检查方法(或两者),您可以选择将其包含在您的集合中或丢弃它。

当然,您可能会获得许多“P”标签或 DIV/SPAN 标签作为您的顶级节点/项目。所以,我假设你有可能不想要这些,所以随意丢弃它们并询问他们的孩子。

于 2012-09-15T09:05:59.687 回答
0

正如 hienvd_csuit 所建议的那样,我认为 HTML Agility Pack 是您的最佳选择。如果您仍想使用,可能的解决方案是使用(需要 .NET 4+)WebBrowser直接访问非托管 DOM 。dynamic例如,您可以执行以下操作:

dynamic dom = wb.Document.DomDocument;
foreach (dynamic node in dom.childNodes)
{
    Console.WriteLine ("{0} - {1} - {2}", node.nodeType, node.nodeName, node.nodeValue);
}

当然,您需要了解 DOM 的结构,因为智能感知不适用于动态对象;你可以在这里找到一些关于它的信息。

于 2012-09-11T22:03:12.027 回答
0

尝试使用HTMLAgilityPack,它支持 Xpath,因此您可以根据需要获取任何节点。

于 2012-09-11T19:10:16.637 回答