2016-11-16 80 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); 
相關問題