它嵌套了大约10个函数,所以我只粘贴相关的位:
var nodes = Filter_Chunk(Traverse(), chunks.First());
特别是里面的这个块
Filter_Chunk
(不是双关语):
private static IEnumerable<HtmlNode> Filter_Chunk(IEnumerable<HtmlNode> nodes, string selectorChunk)
{
// ...
string tagName = selectorChunk;
foreach (var node in nodes)
if (node.Name == tagName)
yield return node;
里面没什么太复杂的。。。所以我想应该是
Traverse()
public IEnumerable<HtmlNode> Traverse()
{
foreach (var node in _context)
{
yield return node;
foreach (var child in Children().Traverse())
yield return child;
}
}
public SharpQuery Children()
{
return new SharpQuery(_context.SelectMany(n => n.ChildNodes).Where(n => n.NodeType == HtmlNodeType.Element), this);
}
我试着找到
<h3>
上的节点
stackoverflow.com
实际上,这里肯定有一个bug,导致它返回的节点比应该返回的更多。。。
I forked the question to address the issue