【问题标题】:Walking a WebBrowser control DOM - elements with both children and text遍历 WebBrowser 控件 DOM - 具有子元素和文本的元素
【发布时间】:2013-03-28 12:04:46
【问题描述】:

我正在尝试使用 C# 遍历 WebBrowser 控件的 DOM,并对每个 HtmlElement 执行一些处理。 (我同时对 DOM 进行了一些转换,但对于本次讨论,假设我试图通过递归遍历每个节点来展平 DOM)

当我遇到类似的事情时:

<p>Text with a <a href="http://www.example.com/">link</a> in the middle of it </p>

我找到了 P 标记的 HtmlElement(其中包含预期的 InnerText)和与标记 A 对应的子 HtmlElement 节点。A 标记的 HtmlElement 包含预期的内部文本。

但是我找不到任何与 A 标签前后的文本相关的结构或属性。

除了将 P 标记的 InnerHtml 属性与 A 标记的 OuterHtml 属性进行比较的可怕技巧之外,还有其他方法可以找到 A 标记的文本之前和之后的文本吗?

或者还有其他方法可以遍历 IE DOM?

【问题讨论】:

  • 我可以清楚地对 InnerHtml 进行正则表达式 - 但这对于大型 DOM 可能效率低下。

标签: c# dom webbrowser-control


【解决方案1】:

要在 DOM 中获取文本节点,QI(C# 中的一种类型转换)是 mshtml.IHTMLDOMNode 的父元素(Windows 窗体中的 HtmlElement.DomElement)。

然后就可以通过IHTMLDOMNode.childNodes获得直接子节点了。然后枚举IHTMLDOMNode.childNodes 集合,查找类型为3(文本)的节点。如果您还想在子元素中查找文本节点,请对类型 1 子节点重复此操作。

【讨论】:

  • 谢谢。混合 HtmlElment IHMTLElement 和 IHTMLDOMNode 似乎很奇怪,但它确实有效!
猜你喜欢
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多