为什么在这个HtmlNodeCollection的末尾总是有一个空字符串?

时间:2016-11-16 01:29:00

标签: c# xpath html-agility-pack

我编写了一个方法,它将返回Stack Overflow问题中的所有标记。唯一的问题是集合中的最后一项始终是空字符串。

private static async Task<IEnumerable<string>> GetQuestionTags(string url)
{
    var document = await Task.Factory.StartNew(() => new HtmlWeb().Load(url));
    var nodes = document.DocumentNode.SelectNodes("//*[@id=\"question\"]/table//tr[1]/td[2]/div/div[2]//a");
    return nodes.Select(node => node.InnerText);
}

可以每次只删除集合中的最后一项,但我不想这样做。

为什么总是有一个空字符串作为集合中的最后一项,我怎么能不检索该项呢?

1 个答案:

答案 0 :(得分:1)

将我的评论转换为答案......

您可以在谓词中使用normalize-space() 过滤掉空元素,即仅包含空格或仅包含空格的元素:

var xpath = "//*[@id='question']/table//tr[1]/td[2]/div/div[2]//a[normalize-space()]";
var nodes = document.DocumentNode.SelectNodes(xpath);