0
私は与えられたURLのランキングを得るためにAlexaに問い合わせています。戻り値はXMLです。ほとんどの場合、AlexaはREACH & RANK値を含むXMLを返しますが、時にはそうではありません。PHP:ノードが存在し、xpathを使用していないかどうかをチェックするには?
致命的なエラー:...非オブジェクトのメンバ関数のxpath()の呼び出し
// 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'];
同様にそれがないではない場合は、その次のコードは、RANKの値がエラーをスローつかみます私は、上記の時々のXMLツリーは次のようになります。
<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>
、時にはそれは次のようになります。
<ALEXA VER="0.9" URL="store.guldfors.nu/" HOME="0" AID="=">
<SD TITLE="A" FLAGS="" HOST="store.guldfors.nu"></SD>
</ALEXA>
は、REACHまたはRANKノード/属性を持たない。
は、次のようなXPathのラップするとにかくあります:私は上記を試した
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'];
}
は、動作しません。
を参照してください、私はしてgetノードセクションをラップしようとしました'if(count($ xml-> xpath( '* *')> 2)){}'というノードの数を数えるためには、次のようになります。構文は、アイデアではなく、間違っているかもしれません。 –
私はPHPを知らない。 xpath(例えばcount(// *)> 2)の呼び出しの中でカウントする呼び出しを含むか? – Steve