Как получить доступ к дочернию node из node в htmlagility pack
<html>
<body>
<div class="main">
<div class="submain"><h2></h2><p></p><ul></ul>
</div>
<div class="submain"><h2></h2><p></p><ul></ul>
</div>
</div>
</body>
</html>
Я загрузил html в HtmlDocument
. Затем я выбрал XPath как submain
. Тогда я не знаю, как обращаться к каждому тегу i.e h2
, p
отдельно.
HtmlAgilityPack.HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//div[@class=\"submain\"]");
foreach (HtmlAgilityPack.HtmlNode node in nodes) {}
Если я использую node.InnerText
, я получаю все тексты и InnerHtml
тоже не полезно. Как выбрать отдельные теги?
Ответы
Ответ 1
Следующие действия помогут:
HtmlAgilityPack.HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//div[@class=\"submain\"]");
foreach (HtmlAgilityPack.HtmlNode node in nodes) {
//Do you say you want to access to <h2>, <p> here?
//You can do:
HtmlNode h2Node = node.SelectSingleNode("./h2"); //That will get the first <h2> node
HtmlNode allH2Nodes= node.SelectNodes(".//h2"); //That will search in depth too
//And you can also take a look at the children, without using XPath (like in a tree):
HtmlNode h2Node = node.ChildNodes["h2"];
}
Ответ 2
Из памяти я считаю, что каждый Node
имеет свою собственную коллекцию ChildNodes
, поэтому в вашем блоке for…each
вы должны проверить node.ChildNodes
.
Ответ 3
Вы ищете Потомков
var firstSubmainNodeName = doc
.DocumentNode
.Descendants()
.Where(n => n.Attributes["class"].Value == "submain")
.First()
.InnerText;