Получить класс из элемента с XPath в PHP - PullRequest
0 голосов
/ 04 августа 2020

Как я могу получить число 45 из этого HTML кода с помощью XPath:

<span class="ui_bubble_rating bubble_45"></span>

Это то, что я пробовал до сих пор:

$rating = $xp->query('//span[@class="ui_bubble_rating"]');
$datas[$activity]['rating'] = $rating->item(0)->getAttribute('class');

Что мне не хватает сюда, пожалуйста?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 04 августа 2020

Я бы порекомендовал следующий XPath, как это предлагается в этом вопросе :

//span[contains(concat(" ", normalize-space(@class), " "), " ui_bubble_rating ")]

Затем вы можете получить искомое число с помощью регулярного выражения, которое ищет серия цифр, перед которой стоит bubble_:

$ratingsElements = $xp->query('//span[contains(concat(" ", normalize-space(@class), " "), " ui_bubble_rating ")]');

if ($ratingsElements->length > 0) {
  $firstRatingElement = $ratingsElements->item(0);
  if (preg_match('/(?<=\bbubble_)\d+/', $firstRatingElement->getAttribute('class'), $matches)) {
    $datas[$activity]['rating'] = $matches[0];  // 45
  }
}

Демо

0 голосов
/ 04 августа 2020

Если я правильно понимаю, что вы ищете, это должно работать:

$rating = $xp->query('//span[contains(@class,"ui_bubble_rating")]/@class');
echo explode(" bubble_",$rating[0]->textContent)[1];

Вывод:

45
0 голосов
/ 04 августа 2020

ваш @class ищет прямое совпадение class="ui_bubble_rating"

Возможно, вам придется использовать функцию contains() для поиска в строке

//span[contains(@class,'ui_bubble_rating')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...