使用HTML Agility Pack在HtmlNodeCollection中選擇節點

c# html-agility-pack linq xmlnode xml-parsing

我有這樣的html結構:

<div class="class1">
    <div class="class2">
        <a href="test" title="professional and enthusiast programmers">Stack Overflow</a>
    </div>
    <div class="class2">
    </div>
    <div class="class2">
    </div>
    <div class="class2">
    </div>
</div>
<div class="class1">
    <div class="class2">
        <a href="test" title="professional and enthusiast programmers">Stack Overflow</a>
    </div>
</div>

我試圖用class1選擇所有節點:

HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//*[contains(@class,' class1 ')]");

並選擇該節點中包含class2的所有節點:

foreach (HtmlNode node in nodes)
{
   HtmlNodeCollection nodes2 = node.SelectNodes("//*[contains(@class,' class2 ')]");
}

但是nodes2從所有節點獲得class2。我究竟做錯了什麼?

一般承認的答案

var nodes = doc.DocumentNode.SelectNodes("//div[@class='class1']");

var nodes2 = nodes.Select(c1 => c1.SelectNodes("div[@class='class2']"));

熱門答案

替代XPath為我工作

var nodes = doc.DocumentNode.SelectNodes("//div[@class='class1']");
var nodes2 = nodes.Select(c1 => c1.SelectNodes(".//div[@class='class2']"));


Related

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