2013-06-26 5 views
-3

J'essaie de changer/mettre à jour la description méta de dom pour une de mes pages sur fly. J'ai donc essayé la voie suivante,xpath requête ne donnant aucun résultat

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 :(

Ici, je suis incapable d'obtenir la valeur de contenu pour la méta description.

  • J'ai vérifié htmlspecialchars($dom) & cela semble correct.
  • J'ai regardé view-source de la page & desciption dans la balise html-> head-> meta (pastebin de l'étiquette de tête de page).

Quelqu'un peut-il m'aider à résoudre ce problème? Quelque chose ne va pas avec ma requête?

+1

Je pense que vous devriez concaténer $ Nom avec des guillemets doubles car il devrait être '@ name =" description "', supprime également les barres obliques dans l'attribut name. '$ query = '/ html/head/meta [@name ='." $ name ". ']/@ content';' –

+0

Pas de chance. Essayé avec des guillemets simples et doubles, toujours pas de sortie. C'est ma requête '/ html/head/meta [@ nom =" description "]/@ content'. – Rikesh

+2

Avez-vous regardé http://stackoverflow.com/questions/2907478/get-meta-description-tag-with-xpath – user20232359723568423357842364

Répondre

3

Fonctionne pour moi, quand la aleur est entre guillemets, montrons un exemple, car il ne devient pas clair dans le commentaire.

J'ai créé un fichier 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> 

puis un 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; 
?> 

Et la sortie est some content

Vous devez fermer les guillemets simples après les premières doubles les , donc ils seront conservés dans la chaîne entre guillemets, puis pour mettre la variable, commencer à citer et mettre à nouveau des guillemets

EDIT:

Je l'ai utilisé votre code HTML à partir du site affiché:

<!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> 

et toujours pas de problème, sortie:

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

Questions connexes