HTML Agility Pack - 在特定節點之後選擇節點

asp.net c# html html-agility-pack

在codeplex討論中提出了這個問題但我希望能在stackoverflow上得到更快的答案。

因此,我使用HTML Agility Pack在C#中進行HTML解析。我有以下html結構:

<body>
   <p class="paragraph">text</p>
   <p class="paragraph">text</p>
   <p class="specific">text</p>
   <p class="paragraph">text</p>
   <p class="paragraph">text</p>
</body>

而且我需要獲得所有帶有“段落”的p元素,這些元素存在於帶有“特定”類的p元素之後。

有沒有辦法做到這一點?

謝謝。

一般承認的答案

在Mark的例子中使用.Class(如果不存在,替換適當的東西)

使用SkipWhile

例如在LINQPad中你得到5,6,7來自:

int[] a = { 6, 5, 6 ,7 };
a.SkipWhile(x=>x!=6).Skip(1).Dump();

因此,根據SelectNodes返回的類型,可以:

int[] a = { 6, 5, 6 ,7 };
a.SkipWhile(x=>x!=6).Skip(1).Dump();

要么

int[] a = { 6, 5, 6 ,7 };
a.SkipWhile(x=>x!=6).Skip(1).Dump();

(或醜陋的版本)

int[] a = { 6, 5, 6 ,7 };
a.SkipWhile(x=>x!=6).Skip(1).Dump();

(或者在某些情況下 - 如果您的表達式已經過適當過濾,則不會

int[] a = { 6, 5, 6 ,7 };
a.SkipWhile(x=>x!=6).Skip(1).Dump();

編輯:我可能會創建一個擴展方法:

int[] a = { 6, 5, 6 ,7 };
a.SkipWhile(x=>x!=6).Skip(1).Dump();

有人關心為此搜索現有技術嗎?有什麼好名字的建議?


熱門答案

嘗試這個

bool latterDayParagraphs = false;
List<DocumentNode> nodes = new List<DocumentNode>();
foreach(var pElement in doc.DocumentNode.SelectNodes("/p"))
{
   if(pElement.Class != "paragraph") 
   {
      latterDayParagraphs = true;
      continue;
   }
   if(latterDayParagraphs)
   {
      nodes.Add(pElement);
   }
}



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