У меня есть этот код, и я хочу получить текст внутри «сильного» кода.
Вывод 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.
Поскольку вы используете идентификатор, вы можете получить первый элемент из этого списка, который будет 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'));
Собираюсь рискнуть и заподозрить, что удаленная страница загружает данные через JavaScript.
@ Четвертая птица var_dump($check->length) дает мне int(0), а var_dump($xpath->query('//strong')) дает мне object(DOMNodeList)#4 (1) { ["length"]=> int(0) }
Если это будет возвращено, я думаю, что @Phil может быть прав в том, что данные загружаются через JavaScript.
Через javascript я не могу получить значения? В F12 я вижу значения, но когда я правильно просматриваю исходный код, я не вижу никакой ценности
Вот две возможности. Вы можете прочитать свойство $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"])');
Что не работает?
$checkбудетDOMNodeList, который вам нужно повторить