PHP: Как проверить, существует ли узел и не используется ли xpath? - PullRequest
0 голосов
/ 29 марта 2012

Я запрашиваю Алексу, чтобы получить рейтинг данного URL.Возврат в XML.В большинстве случаев Alexa возвращает XML, содержащий значения REACH & RANK, хотя иногда это не так.Если этого не происходит, приведенный ниже код, который получает значение для RANK, выдает ошибку:

Неустранимая ошибка: вызов функции-члена 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'];

Как я уже говорил выше, иногда дерево 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'];
}

Я пробовал выше, не работает.

1 Ответ

0 голосов
/ 29 марта 2012

Я не уверен в точном синтаксисе, но вы можете попробовать подсчитать количество узлов в наборе целевых узлов и определить, больше ли он нуля.

Например, count (// Reach)> 0

Другой вариант - использовать логическое значение (// Reach)

См. Поиск xpath, если узел существует

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...