Ich frage Alexa, um eine bestimmte URL-Rangliste zu erhalten. Die Rückgabe erfolgt in XML. Meistens gibt Alexa XML zurück, das die REACH & RANK-Werte enthält, obwohl dies manchmal nicht der Fall ist. Wenn dies nicht der Fall, greift der Code unten, dass der Wert für RANK einen Fehler wirft:PHP: Wie überprüft man, ob ein Knoten existiert und wenn er keinen XPath benutzt?
Fatal error: Call auf eine Elementfunktion xpath() auf einem Nicht-Objekt ...
// Alexa Ranking
$url = 'http://data.alexa.com/data?cli=10&dat=s&url=' . $final_site;
$ch = curl_init(); // initialize curl handle
curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 4); // times out after 4s
$result = curl_exec($ch); // run the whole process
$xml = simplexml_load_string($result);
//Get reach node
$popularity = $xml->xpath("//REACH"); // <-- ERROR OCCURS HERE
//Get the rank attribute
$alexa_rank = (string)$popularity[0]['RANK'];
Wie ich erwähnte oben, manchmal die xML-Struktur wie folgt aussieht:
<ALEXA VER="0.9" URL="venturengine.com/" HOME="0" AID="=">
<SD TITLE="A" FLAGS="" HOST="venturengine.com">
<LINKSIN NUM="8"/>
</SD>
<SD>
<POPULARITY URL="venturengine.com/" TEXT="8709770"/>
<REACH RANK="8474566"/>
</SD>
</ALEXA>
und manchmal ist es wie folgt aussieht:
<ALEXA VER="0.9" URL="store.guldfors.nu/" HOME="0" AID="=">
<SD TITLE="A" FLAGS="" HOST="store.guldfors.nu"></SD>
</ALEXA>
, die nicht über die REACH- oder RANK-Knoten/Attribute verfügt.
Gibt es trotzdem, den XPath wie einzuwickeln:
if($xml->xpath("//REACH") === TRUE) {
//Get reach node
$popularity = $xml->xpath("//REACH"); // <-- ERROR OCCURS HERE
//Get the rank attribute
$alexa_rank = (string)$popularity[0]['RANK'];
}
ich die oben versucht habe, funktioniert nicht.
Ich habe versucht, den get-Knoten Abschnitt mit der Verpackung um die Anzahl der Knoten zu zählen: 'if (count ($ xml-> xpath ('// *')> 2)) {}' und es hat nicht funktioniert. Die Syntax könnte jedoch nur falsch sein, nicht die Idee. –
Ich weiß nicht, PHP. Enthält der Aufruf zum Zählen innerhalb des Aufrufs von xpath - z. B. $ xml-> xpath ("count (// *)> 2") - funktioniert? – Steve