2016-11-16 4 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 репутации, текст пуст. Сделайте так, чтобы он выбирал span и * then * 'a' только для тегов. Или используйте SE API. Вот дополнительный элемент, который вы выбираете: http://i.imgur.com/coCLCVl.png – Rob

+0

Вы можете попробовать добавить предикат, чтобы избежать выбора пустого '' element: '.... // a [normalize- space()] ' – har07

+0

@Rob Для меня не существует span-tags-wrapper span ... – 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);