SelectSingleNode與SelectNodes始終從根元素開始算,即便是非根節點調用。html
當使用節點.ChildNodes後,SelectSingleNode與SelectNodes的對象纔會變爲真正的節點,而非根節點。node
HtmlNode currentNode = htmlDoc.DocumentNode; // 根節點 currentNode = currentNode.SelectSingleNode("//*[contains(@class,'aa')]"); // 指向非根節點 HtmlNode node2= currentNode.SelectSingleNode("//*[contains(@class,'aa')]"); // 指向根節點的第一個匹配對象,而非currentNode的第一個匹配
currentNode = htmlDoc.DocumentNode.FirstChild; // 根節點 currentNode = currentNode.SelectSingleNode("//*[contains(@class,'aa')]"); // 指向非根節點 foreach (HtmlNode node2 in currentNode.ChildNodes) { HtmlNode node3 = node2.SelectSingleNode("//*[contains(@class,'a3')]"); // 這而纔是指向node2中的匹配對象 }