@iSensetivity
бухгалтер, програміст-самоук

Как искать в ранее найденом елементе xpath?

Есть страница с табличной версткой где расположеньі персонажи.
Код для вьіборки всей таблицьі.
//h2[text()="Characters & Voice Actors"]/following-sibling::table[position() < last()]//tr/td[contains(@class, "borderClass bgColor") and 2 = position()]

Далее надо вьібрать тока персонажей
//tr/td[contains(@class, "borderClass bgColor") and 2 = position()]

И в них уже роль
div/small
и имя персонажа с ссьілки
/a

Как использовать результаты предварительной выборки?
Чтобьі не делать каждьій раз поиск по всему документу:
//h2[text()="Characters & Voice Actors"]/following-sibling::table[position() < last()]//tr/td[contains(@class, "borderClass bgColor") and 2 = position()]/div/small/text()


//h2[text()="Characters & Voice Actors"]/following-sibling::table[position() < last()]//tr/td[contains(@class, "borderClass bgColor") and 2 = position()]/a


$extracted = $anime->getFilterXPath('//h2[text()="Characters & Voice Actors"]/following-sibling::table[position() < last()]');
echo iterator_count($extracted); // 39

$extracted2 = $anime->getFilterXPath('//tr/td[contains(@class, "borderClass bgColor") and 2 = position()]', $extracted);
echo iterator_count($extracted2); //68

$extracted3 = $anime->getFilterXPath('//h2[text()="Characters & Voice Actors"]/following-sibling::table[position() < last()]//tr/td[contains(@class, "borderClass bgColor") and 2 = position()]');
echo iterator_count($extracted3); //39
  • Вопрос задан
  • 2315 просмотров
Решения вопроса 1
glebovgin
@glebovgin
Full Stack Web Developer
В метод query вторым параметром передается DOMNode, внутри которого надо что-то найти. В документации годный пример есть php.net/manual/ru/domxpath.query.php
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@krypt3r
1.
Как использовать результаты предварительной выборки?

Вы неправильно написали слово "выборки". Надо было "вьiборки".
2. Юзать XPath для парсинга HTML? Ну-ну, а если он невалиден?
2. Читать документацию по методу getFilterXPath(), есть ли у него параметр $contextnode. Если нет, топайте в сторону DOMXPath.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы