Мне нужно содержание описание и содержание тегов ключевых слов. У меня есть этот код, но ничего не пишите. Идея?
$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;