PHP Xpath Как получить внутренний текст strong с помощью id


У меня есть этот код, и я хочу получить текст внутри «сильного» кода.
Вывод html, оттуда мне нужно значение:

<strong id = "sku-price">199.98</strong>

И этот код, который я использую сейчас

$link = "http://www.example.com";
$html = file_get_contents($link);
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXpath($doc);

$check = $xpath->query('//strong[@id = "sku-price"]');
foreach($check as $p){
  **Then I don't know what to write here to get the value** 
}

В настоящее время это не работает, пожалуйста, помогите разобраться.

Спасибо.

Что не работает? $check будет DOMNodeList, который вам нужно повторить

Phil 09.09.2018 12:21

добавить дополнительную информацию к вопросу.

Haviv 09.09.2018 12:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
77
2

Ответы 2

$check будет DOMNodeList. Поскольку вы используете идентификатор, вы можете получить первый элемент из этого списка, который будет DOMElement, и получить nodeValue:

echo $check->item(0)->nodeValue;

Если вы хотите использовать foreach, вы можете обновить свой код до:

foreach($check as $p){
    echo $p->nodeValue;
}

@Haviv Это демонстрация с использованием html из вашего примера. Вы уверены, что html содержит ваш <strong id = "sku-price">? Можете проверить, что дает var_dump($check->length);? Или проверить, есть ли вообще элементы <strong>? Как var_dump($html); или var_dump($xpath->query('//strong'));

The fourth bird 09.09.2018 12:41

Собираюсь рискнуть и заподозрить, что удаленная страница загружает данные через JavaScript.

Phil 09.09.2018 12:57

@ Четвертая птица var_dump($check->length) дает мне int(0), а var_dump($xpath->query('//strong')) дает мне object(DOMNodeList)#4 (1) { ["length"]=> int(0) }

Haviv 09.09.2018 13:12

Если это будет возвращено, я думаю, что @Phil может быть прав в том, что данные загружаются через JavaScript.

The fourth bird 09.09.2018 13:26

Через javascript я не могу получить значения? В F12 я вижу значения, но когда я правильно просматриваю исходный код, я не вижу никакой ценности

Haviv 09.09.2018 13:35

Вот две возможности. Вы можете прочитать свойство $textContent. Он содержит текстовое содержимое всех узлов-потомков.

$nodes = $xpath->query('//strong[@id = "sku-price"]');
foreach($nodes as $strong) {
  var_dump($strong->textContent); 
}

Или вы получаете его напрямую с помощью Xpath. DOMXpath::evaluate() поддерживает выражения Xpath, возвращающие скалярные значения. Преобразуйте список узлов в выражении в строку.

var_dump($xpath->evaluate('string(//strong[@id = "sku-price"])');

Другие вопросы по теме