Не могу получить nodeValue элемента - PullRequest
0 голосов
/ 13 февраля 2019

Я работаю над простым SEO-приложением, которое получает результат ранга с другого сайта через curl_multi_getcontent.

Моя проблема в том, что я не могу определить местоположение элемента с помощью xpath.

<div class="mt10">
    <ul class="ResultListWrap">
        <li class="ReListCent RelistHead clearfix"></li>
        <li class="ReListCent RelistHead bor-b1s clearfix">
            <div class="w25-0"></div>
            <div class="w8-0"></div>
            <div class="w8-0"></div>
            <div class="w8-0"></div>
            <div class="w8-0">
                <a href="">Text</a> <!-- GET THE VALUE OF THIS -->
            </div>
            <div class="w8-0"></div>
            <div class="w25-0"></div>
        </li>
        <li class="ReListCent RelistHead bor-b1s clearfix"></li>
        <li class="ReListCent RelistHead bor-b1s clearfix"></li>
        <li class="ReListCent RelistHead bor-b1s clearfix"></li>
        <li class="ReListCent RelistHead bor-b1s clearfix"></li>
        <li class="ReListCent RelistHead bor-b1s clearfix"></li>
        <li class="ReListCent RelistHead bor-b1s clearfix"></li>
        <li class="ReListCent RelistHead bor-b1s clearfix"></li>
        <li class="ReListCent RelistHead bor-b1s clearfix"></li>
        <li class="ReListCent RelistHead bor-b1s clearfix"></li>
    </ul>
</div>

Мне нужно получить результат только с пятой div секунды <li>.

SAMPLE CODE

        $urlContent = curl_multi_getcontent($url);

        $document = new \DOMDocument('1.0', 'UTF-8');

        // set error level
        $internalErrors = libxml_use_internal_errors(true);
        // load HTML
        $document->loadHTML($urlContent);
        // Restore error level
        libxml_use_internal_errors($internalErrors);

        $finder = new DomXPath($document);
        $results = $finder->query('(//div[@class="ReListCent"])[2]/div[5]/a') -> nodeValue;

        if(isset($results)){

          echo $results;

        }else{
          // NO RESULT
        }

1 Ответ

0 голосов
/ 13 февраля 2019

Ваш XPath неверен.Элементы <li>, а не <div>, и поскольку class из <li> включает в себя другие значения, вы не можете сравнивать его напрямую.Попробуйте вместо этого:

((//li[contains(@class,"ReListCent")])[2]/div)[5]/a

Кроме того, DOMXPath::query возвращает DOMNodeList, поэтому для доступа к отдельному элементу необходимо указать индекс всписок, используя [n] запись или ->item(n).Поэтому вы должны использовать:

$result = $finder->query('((//li[contains(@class,"ReListCent")])[2]/div)[5]/a')->item(0)->nodeValue;

Я сделал небольшую демонстрацию, показывающую основы кода, работающего над 3v4l.org .

...