Область действия FindChildByXPath

  • Автор темы Автор темы sibbora
  • Дата начала Дата начала

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Реакции
73
Баллы
28
Вот с чем столкнулся: беру строки таблицы <tr></tr> на страничке в семейство Html Elements, затем перебираю эти элементы и выпарсиваю данные из ячеек через FindChildByXPath.
Код:
Развернуть Свернуть Копировать
HtmlElementCollection PhraseBlocks = BudgetDoc.FindElementsByAttribute("tr", "id", @"tr.*", "regexp");
foreach (HtmlElement PhraseBlock in PhraseBlocks.Elements) {}
Так как я считаю, что контекст поиска уже ограничен, то использую в тексте XPath две косых в начале, например:
Код:
Развернуть Свернуть Копировать
.FindChildByXPath(".//div[@class='my_div']/div/em/a",0);
...но дети ищутся почему-то по всему документу! В данном случае - при каждом шаге цикла foreach получаем HtmlElement из первого экземпляра коллекции. Почему так?

Если ставлю точку перед началом пути, то всё работает нормально:
Код:
Развернуть Свернуть Копировать
.FindChildByXPath(".//div[@class='my_div']/div/em/a",0);
Вопрос: а какой смысл тогда делать семейство строк таблицы, если оно ничего не ограничивает и поиск в итоге ведётся по всему документу? Я изначально пытаюсь таким образом сэкономить вычислительные ресурсы.
 
  • Оценить
Реакции: Castaneda и ZX
Не могу воспроизвести проблему.
Пример наглядный
 

Вложения

Проект в аттаче. Вот из этой таблички, например, нужно взять этот столбец:
l5cOC2H.png

XPath с точкой выдаёт правильный результат:
upload_2015-4-13_21-13-24.png
...а без точки - в каждой итерации повторяет значение первой ячейки.
 

Вложения

Последнее редактирование:
5 лет прошло, ошибку так и не и справили.
Столкнулся с ней сегодня тоже.
 
  • Оценить
Реакции: sydoow
Это не ошибка, всегда надо ставить точку, что бы использовать текущий контекст.
Если бы было ограничение, то нельзя было бы получить родителя/соседнего и т.д.
 
Это не ошибка, всегда надо ставить точку, что бы использовать текущий контекст.
Если бы было ограничение, то нельзя было бы получить родителя/соседнего и т.д.
столкнулся с этой же проблемой. Может пропишете эту точку в справку?
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)