- Регистрация
- 03.05.2016
- Сообщения
- 733
- Благодарностей
- 485
- Баллы
- 63
Каждый раз когда использую метод FindChildByXPath(), каждый раз у меня ломается мозг.
Есть коллекция HtmlElement из которой мне нужно дернуть другую коллекцию HtmlElement.
Для примера возьмем блоки поисковой выдачи (блок1, блок2, блок3 ...)
Из этих блоков я хочу забрать HtmlElement: Заголовок, Ссылка, Описание.
Я собираю коллекцию этих блоков
Потом форичем получаю уже нужные HtmlElement: Заголовок, Ссылка, Описание.
Весь мозг ломает индекс в FindChildByXPath("xPath", 0), почему для корректного сбора я должен изменять индекс на +1?
То есть у нас меняется item и мы из этого item под индексом 0 выдергиваем нужные данные по xPath, но нет так не работает, выдергивается только первый результат из выдачи, даже если у нас item от 10 элемента.
Чтобы все заработало и собрать все HtmlElement заголовков должны прописать так
Я не понимаю, почему чтобы все корректно работало мы должны менять индекс у нас ведь и так меняется item?!
Есть коллекция HtmlElement из которой мне нужно дернуть другую коллекцию HtmlElement.
Для примера возьмем блоки поисковой выдачи (блок1, блок2, блок3 ...)
Из этих блоков я хочу забрать HtmlElement: Заголовок, Ссылка, Описание.
Я собираю коллекцию этих блоков
tab.FindElementsByXPath();
Потом форичем получаю уже нужные HtmlElement: Заголовок, Ссылка, Описание.
C#:
foreach (var item in SearchResultCollection)
{
var title = item.FindChildByXPath(RESULT_TITLE, 0);
var link = item.FindChildByXPath(RESULT_LINK, 0);
var description = item.FindChildByXPath(RESULT_DESCRIPTION, 0);
Title.Add(title);
Link.Add(link);
Description.Add(description);
}
То есть у нас меняется item и мы из этого item под индексом 0 выдергиваем нужные данные по xPath, но нет так не работает, выдергивается только первый результат из выдачи, даже если у нас item от 10 элемента.
Чтобы все заработало и собрать все HtmlElement заголовков должны прописать так
C#:
var i = 0; //Костыль для работы FindChildByXPath
foreach (var item in SearchResultCollection)
{
var title = item.FindChildByXPath(RESULT_TITLE, i);
var link = item.FindChildByXPath(RESULT_LINK, i);
var description = item.FindChildByXPath(RESULT_DESCRIPTION, i);
Title.Add(title);
Link.Add(link);
Description.Add(description);
i++;
}