如何使用htmlagilitypack獲取2個周圍html元素之間的html?


我需要使用帶有C#的htmlagilitypack來檢索包含在其他2個html元素中的html元素。

舉個例子,我有以下幾點:

<div id="div1" style="style definition here">
  <strong>
    <font face="Verdana" size="2">Your search request retrieved 0 matches.</font>
  </strong>
  <font face="Verdana" size="2">Some more text here.</font>
  <br><br>
  <!--more html here-->
</div>

我想把它們之間的一切都歸還

<div id="div1" style="style definition here">
  <strong>
    <font face="Verdana" size="2">Your search request retrieved 0 matches.</font>
  </strong>
  <font face="Verdana" size="2">Some more text here.</font>
  <br><br>
  <!--more html here-->
</div>

和第一個

<div id="div1" style="style definition here">
  <strong>
    <font face="Verdana" size="2">Your search request retrieved 0 matches.</font>
  </strong>
  <font face="Verdana" size="2">Some more text here.</font>
  <br><br>
  <!--more html here-->
</div>

沒有返回這些元素。

我無法理解為此所需的語法,所以如果有人能夠向我解釋獲取其他2個已知開始標記之間存在的html而忽略結束標記的最佳方法,我會非常感激。

我還要提一下,我需要首先在完整網頁的周圍html中找到div為id的div。

我不需要實際節點與來自特定 HtmlDocument的節點具有引用相等HtmlDocument ,它們只需要在內容方面相同。

一般承認的答案

返回HtmlNode實例時,對同一節點的多次調用將生成相同的引用。你可以利用這個優勢(儘管這是一個實現細節,所以要小心)。

基本上,您將獲得所有元素的後代,直到相關節點。您選擇要從以下位置開始的節點:

HtmlNode divNode = doc.DocumentNode.SelectSingleNode("div[@id='div1']");

您要前往的節點:

HtmlNode divNode = doc.DocumentNode.SelectSingleNode("div[@id='div1']");

然後在Enumerable上使用TakeWhile擴展方法將所有元素放到第二個元素之前,如下所示:

HtmlNode divNode = doc.DocumentNode.SelectSingleNode("div[@id='div1']");

這是TakeWhile方法( n => n != brNode )中的比較,它取決於參考比較(這是實現細節部分)。

最後一個過濾器只為您提供元素節點,因為這是調用SelectSingleNode通常會得到的;如果要處理其他節點類型,可以省略它。

循環通過這些節點,如下所示:

HtmlNode divNode = doc.DocumentNode.SelectSingleNode("div[@id='div1']");

生產:

HtmlNode divNode = doc.DocumentNode.SelectSingleNode("div[@id='div1']");




許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因