为什么在这个 HtmlNodeCollection 的末尾总是有一个空字符串?
Why is there always an empty string at the end of this HtmlNodeCollection?
我写了一个方法,可以 return 来自 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);
}
我可以每次都简单地删除集合中的最后一项,但我不想那样做。
为什么总是有一个空字符串作为集合中的最后一项,我怎么找不到那个项目?
正在将我的评论转换为答案...
您可以在谓词中使用 normalize-space()
来 过滤掉 空元素,即仅包含空格或不包含任何内容的元素:
var xpath = "//*[@id='question']/table//tr[1]/td[2]/div/div[2]//a[normalize-space()]";
var nodes = document.DocumentNode.SelectNodes(xpath);
我写了一个方法,可以 return 来自 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);
}
我可以每次都简单地删除集合中的最后一项,但我不想那样做。
为什么总是有一个空字符串作为集合中的最后一项,我怎么找不到那个项目?
正在将我的评论转换为答案...
您可以在谓词中使用 normalize-space()
来 过滤掉 空元素,即仅包含空格或不包含任何内容的元素:
var xpath = "//*[@id='question']/table//tr[1]/td[2]/div/div[2]//a[normalize-space()]";
var nodes = document.DocumentNode.SelectNodes(xpath);