Объект класса DOMNodeList не может быть преобразован в строку - PullRequest
5 голосов
/ 26 мая 2011

Я получил вышеупомянутую ошибку и попытался распечатать объект, чтобы увидеть, как я мог получить доступ к данным внутри него, но он только повторил DOMNodeList Object ()

function dom() {
$url = "http://website.com/demo/try.html";
$contents = wp_remote_fopen($url);

$dom = new DOMDocument();
@$dom->loadHTML($contents);
$xpath = new DOMXPath($dom);

$result = $xpath->evaluate('/html/body/table[0]');
print_r($result);
    }

Я использую Wordpress, таким образомобъясняет функцию wp_remote_fopenЯ пытаюсь повторить первую таблицу из $ url

Ответы [ 2 ]

15 голосов
/ 26 мая 2011

Да, DOMXpath::query всегда возвращает DOMNodeList, что является немного странным объектом для работы.В основном вам нужно перебрать его, или просто использовать item(), чтобы получить один элемент:

// There's actually something in the list
if($result->length > 0) {
  $node = $result->item(0);
  echo "{$node->nodeName} - {$node->nodeValue}";
} 
else {
  // empty result set
}

Или вы можете просмотреть значения:

0 голосов
/ 22 мая 2014

Xpath начинает индекс с 1, а не с 0: /html/body/table[1]

Теперь все зависит от того, хотите ли вы сохранить HTML-код соответствующего узла или вам нужно текстовое содержимое узла.

$html = <<<'HTML'
<html>
  <body>
    <p>Hello World</p>
  </body>
</html>
HTML;

$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);

// iterate all matched nodes and save them as HTML to a buffer
$result = '';
foreach ($xpath->evaluate('/html/body/p[1]') as $p) {
  $result .= $dom->saveHtml($p);
}
var_dump($result);

// cast the first matched node to a string
var_dump(
  $xpath->evaluate('string(/html/body/p[1])')
);

Демо: https://eval.in/155592

string(18) "<p>Hello World</p>"
string(11) "Hello World"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...