запрос php / xpath: как получить содержимое div, которое может иметь вложенные div? - PullRequest
0 голосов
/ 22 сентября 2011

я пытаюсь создать функцию, которая возвращает внутренний HTML-код div с конкретным именем класса. Я искал вокруг, и люди, кажется, говорят, что запрос xpath - это путь. вот что я получил:

function getDivContent($html, $classname) {
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$result = $xpath->query('//div[class="'.$classname.'"]');
return $result;
}

но возвращается только:

object(DOMNodeList)#3 (0) { }

Кто-нибудь может определить ошибку?

РЕДАКТИРОВАТЬ: Решение:

function nodeContent($n, $outer=false) { 
    $d = new DOMDocument('1.0'); 
    $b = $d->importNode($n->cloneNode(true),true); 
    $d->appendChild($b); $h = $d->saveHTML(); 
    // remove outter tags 
    if (!$outer) $h = substr($h,strpos($h,'>')+1,-(strlen($n->nodeName)+4)); 
    return $h; 
} 

function getDivContentByClass($html, $class) {
    $query = "//div[@class='$class']";
    $dom = new DOMDocument();
    @$dom->loadHTML($html);
    $xpath = new DOMXPath($dom);
    $result = $xpath->query($query);
    $data = nodeContent($result->item(0));
    return $data; 

}

1 Ответ

0 голосов
/ 22 сентября 2011

Функция запроса xpath возвращает NODEList, который по сути является массивом результатов, даже если существует только один соответствующий узел.

return $result->item(0);

вернет только первый соответствующий узел. Чтобы получить контент, вы можете использовать $result->item(0)->nodeValue, что эквивалентно .innerHTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...