получить метатег описания с помощью xpath

Мне нужно содержание описание и содержание тегов ключевых слов. У меня есть этот код, но ничего не пишите. Идея?

$str = <<< EOD <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta name="description" content="text in the description tag" /> <meta name="keywords" content="text, in, the, keywords, tag" /> </head> EOD; $dom = new DOMDocument(); $dom->loadHTML($str); $xpath = new DOMXPath($dom); $nodes = $xpath->query('/html/head/meta[name="description"]'); foreach($nodes as $node){ print $node->nodeValue; } 

Вы можете ссылаться на атрибуты с помощью @ за которым следует имя атрибута (см. Ниже), и вы можете напрямую запрашивать атрибуты; ваш запрос XPath был почти там.

 // Look for the content attribute of description meta tags $contents = $xpath->query('/html/head/meta[@name="description"]/@content'); // If nothing matches the query if ($contents->length == 0) { echo "No description meta tag :("; // Found one or more descriptions, loop over them } else { foreach ($contents as $content) { echo $content->value . PHP_EOL; } } 

У вас две проблемы. Во-первых, имя является атрибутом, поэтому вам нужно добавить @,

 $nodes = $xpath->query('/html/head/meta[@name="description"]'); 

Во-вторых, все узлы пусты, поэтому печатать нечего.

Чтобы напечатать значение атрибута, сделайте это,

 foreach($nodes as $node){ $attr = $node->getAttribute('content'); print $attr; } 

Вместо того, чтобы включать / html / head часть, вы также можете использовать двойную косую черту, что означает, что следующий узел может быть где угодно в коде:

 //meta[@name='description'] 

Дает тот же результат, что и:

 /html/head/meta[@name='description'] 

На самом деле не имеет большого значения, но это меньше набирает …

И последнее, но не менее важное, и, к сожалению, для оживления этого потока, запросы чувствительны к регистру.

Другими словами, если вы ищете meta name = "description" … или "meta name =" keywords ", он не найдет" meta name = "Описание" … или "meta name =" Keywords ".. соответственно, так осторожно!

И я могу вам сказать, что после работы с xdom и метатегами, в конечном итоге, я считаю, что лучший подход для этого – использовать эту функцию: http://php.net/manual/es/function.get-meta-tags. PHP

Убедитесь, что вы положили EOD; на строке без пробелов и отступов, например:

  $str = <<< EOD <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> EOD;