如何使用'html agility pack'获取子节点

tes*_*ack 4 c# html-agility-pack

如何使用'html agility pack'获取子节点?

var Webget = new HtmlWeb();
var doc = Webget.Load(url);
HtmlNode elementbyId = doc.GetElementbyId("nome");
Run Code Online (Sandbox Code Playgroud)

我只需要进入内部节点 <div id="nome">

HTML:

<div id="nome">
    <p> <!-- this node --> 
    <strong></strong>
    </p>
    <br/><!-- this node --> 
    <span><!-- this node --> 
    <strong></strong>
    </span>
    <p><!-- this node --> 
    <span></span>
    </p>
</div>
Run Code Online (Sandbox Code Playgroud)

更新:

我写了下面的代码,但这是错误的.

var nodes = elementbyId.Descendants();
Run Code Online (Sandbox Code Playgroud)

此代码获取内部的所有元素 <div id="nome">

有办法解决问题吗?我不知道

har*_*r07 5

使用SelectNodes("*")而不是Descendants()获取当前元素的直接子元素.这是一个工作示例:

var html = @"<div id='nome'>
    <p> <!-- this node --> 
    <strong></strong>
    </p>
    <br/><!-- this node --> 
    <span><!-- this node --> 
    <strong></strong>
    </span>
    <p><!-- this node --> 
    <span></span>
    </p>
</div>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
HtmlNode elementbyId = doc.GetElementbyId("nome");
var nodes = elementbyId.SelectNodes("*");
foreach (var htmlNode in nodes)
{
    Console.WriteLine(htmlNode.OuterHtml);
    Console.WriteLine("-----------------------");
}
Run Code Online (Sandbox Code Playgroud)

Dotnetfiddle Demo

输出:

<p> <!-- this node -->
    <strong></strong>
    </p>
-----------------------
<br/>
-----------------------
<span><!-- this node -->
    <strong></strong>
    </span>
-----------------------
<p><!-- this node -->
    <span></span>
    </p>
-----------------------
Run Code Online (Sandbox Code Playgroud)