2013-06-26 139 views
-3

我正在尝试更改/更新dom中的一个我的页面的元描述。所以我试着按照下面的方式,xpath查询没有给出结果

libxml_use_internal_errors(true); //I'm not sure this is helpful 
$xpath = new DOMXPath($dom); 
$name = 'desciption'; 
$query = '/html/head/meta[@name=\''.$name.'\']/@content'; 
$contents = $xpath->query($query); 
echo $contents->item(0)->value; //blank :(

在这里,我无法获取元描述的内容值。

  • 我检查了htmlspecialchars($dom) &这似乎是正确的。
  • 我检查了页面的查看源&说明位于html-> head-> meta 标记(页头标记的pastebin)。

任何人都可以帮我解决这里可能存在的问题吗?我的查询有什么问题吗?

+1

我想你应该串联$名称用双引号,因为它应该是'@ name =“description”',同时删除name属性中的斜线。 '$ query ='/ html/head/meta [@name ='。“$ name”。']/@ content';' –

+0

没有运气。用单引号和双引号试过,仍然没有输出。这是我的查询'/ html/head/meta [@ name =“description”]/@ content'。 – Rikesh

+2

你看过http://stackoverflow.com/questions/2907478/get-meta-description-tag-with-xpath – user20232359723568423357842364

回答

3

适用于我,当alue用双引号引起来时,让我们发布一个示例,因为它在评论中不明确。

我创建了一个文件html.html

<html> 
    <head> 
     <title></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <meta name="description" content="some content"> 
    </head> 
    <body> 
     <div>TODO write content</div> 
    </body> 
</html> 

,然后一个PHP:

<?php 
$file = "html.html"; 
$dom = new DOMDocument(); 
$dom->loadHTMLFile($file); 
$xpath = new DOMXPath($dom); 
$name = 'description'; 
$query = '/html/head/meta[@name="'.$name.'"]/@content'; 
$contents = $xpath->query($query); 
echo $contents->item(0)->value; 
?> 

,输出为some content

您需要的第一双的人后关闭单引号,所以他们会被保留在引用的字符串中,然后放置变量,开始引用并重新放置双引号

编辑:

我用你的HTML从发布网站:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<style type="text/css" media="screen"> 
<!-- 
#qm0 {position:relative;} 
        #qm0 a {display:block; white-space:nowrap; } 
        #qm0 div a {float:none;} 
        #qm0 div {visibility:hidden;position:absolute;} 
        #qm0 a {float: left; } 
--> 
</style> 
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 
<title>Product1 Name</title> 
<link href="n-defaultStyle.css" rel="stylesheet" type="text/css"> 
<meta http-equiv="pragma" content="no-cache"> 
<meta name="keywords" content=" Ilmfpnv, VrbfZgj, Fsikeprr Mluw"> 
<meta name="description" content="Beu Urb Hcsmihnurb cl c avlqclb ZtatcZq nrbc in unidrdpt cft mbvfp kj rmi isspulu. Uqwoiab in sf upq lkspuj jZ oed diirovs"> 
</head> 

,仍然有没有问题,输出:

Beu Urb Hcsmihnurb cl c avlqclb ZtatcZq nrbc in unidrdpt cft mbvfp kj rmi isspulu. Uqwoiab in sf upq lkspuj jZ oed diirovs