Запрос PHP DOMXPath с использованием innerHTML / nodeValue элемента для поиска и возврата элемента - PullRequest
2 голосов
/ 08 сентября 2011

Не могли бы вы помочь мне с правильным синтаксисом, который нужно использовать, когда вы хотите проверить innerHTML / nodeValue элемента?

У меня нет проблем с именем, однако Age находится внутри простого элемента div,Какой правильный синтаксис использовать вместо «НЕ УВЕРЕН, ЧТО СДЕЛАТЬ ЗДЕСЬ» ниже.

$ html - это страница из Интернета

Имя человека в диапазоне, например:

<span class="fullname">John Smith</span>

Возраст людей в делении:

<div>Age: 28</div>

У меня есть следующий PHP:

<?php
$dom = new DomDocument();
@$dom->loadHTML($html);
$finder = new DOMXPath($dom);

//Full Name
$findName = "fullname";
$queryName = $finder->query("//span[contains(@class, '$findName')]");
$name = $queryName->item(0)->nodeValue;

//Age
$findAge = "Age: ";
$queryAge = $finder->query("//div[NOT SURE WHAT TO PUT HERE]");
$age = substr($queryAge->item(0)->nodeValue, 5);
?>

1 Ответ

2 голосов
/ 08 сентября 2011

Попробуйте

$queryAge = $finder->query("//div[starts-with(., '$findAge')]");

У меня был ограниченный успех с starts-with() из-за пробелов, поэтому вам, возможно, придется прибегнуть к

$queryAge = $finder->query("//div[contains(., '$findAge')]");

Если есть вероятность обнаружения ложных срабатываний(т. е. другие div-ы с «Age:» в них), вы можете избежать этого, используя более конкретный путь (если известен), например

$queryAge = $finder->query("//div[@id='something']//div[contains(., '$findAge')]");
...