2016-11-16 66 views
1

我写了一个方法,将返回堆栈溢出问题的所有标记。唯一的问题是集合中的最后一项始终是一个空字符串。为什么在这个HtmlNodeCollection的末尾总会有一个空字符串?

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

还有另一个链接你'选择; '编辑标签'。我想象,因为你没有10,000的声望,所以文本是空白的。让它选择范围和*然后*'a'只是标签。或者,使用SE API。以下是您正在选择的额外项目:http://i.imgur.com/coCLCVl.png – Rob

+0

您可以尝试添加一个谓词以避免选择空的''元素:'.... // a [normalize-空格()]' – har07

+0

@Rob编辑标签包装范围不存在我... – Albertay

回答

1

转换我的评论回答...

可以在谓语使用normalize-space()过滤掉空元素,即只有那些包含空格,或者包含什么都没有:

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