Он!p с помощью SimpleXML для ответа $ в PHP

#php #xml #post #simplexml

#php #xml #Публикация #simplexml

Вопрос:

Я отправляю XML на веб-сервер с помощью PHP, и сервер возвращает XML-ответ. Мне нужна помощь в анализе значений из ответа! Я прочитал инструкции SimpleXML, но, насколько я понимаю, все они предназначены только для тех случаев, когда XML-данные уже созданы, но их необходимо проанализировать. Пока это мой PHP-скрипт:

 <?php
$ch = curl_init("http://api.online-convert.com/queue-insert");
$count = $_POST['count'];
$file = "testdoc2.txt";
$fh = fopen( $file, 'w' );
$carriageReturn = "n";
fwrite( $fh, $count );
fclose( $fh );

$request["queue"] = file_get_contents($count);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
$response = curl_exec($ch);
curl_close ($ch);
echo $response;

$xmlstr = simplexml_load_string($response);

$file = "testdoc.txt";
$fh = fopen( $file, 'w' );
$carriageReturn = "n";
fwrite( $fh, $xmlstr);
fclose( $fh );


?>
  

XML-ответ, который необходимо проанализировать, таков:

 <?xml version="1.0" encoding="utf-8"?>
<queue-answer>
  <status>
    <code>0</code>
    <message>Successfully inserted job into queue.</message>
  </status>
  <params>
    <downloadUrl>http://www.online-convert.com/result/35f6ddbcc2ca58e7e98addc7c2efd6eb</downloadUrl>
    <hash>35f6ddbcc2ca58e7e98addc7c2efd6eb</hash>
  </params>
</queue-answer>
  

Мне просто нужно извлечь значение и показать его пользователю. Я разработчик iPhone.

Комментарии:

1. Я думаю, это может быть полезно debuggable.com/posts /…

Ответ №1:

Сначала вам нужно создать XML-документ запроса и отправить его на сервер, например (без обработки ошибок и др. и без тестирования из-за отсутствия ключа api):

 $request = new SimpleXMLElement('<queue><apiKey/><targetType/><targetMethod/><testMode/><sourceUrl/></queue>');
$request->apiKey = 'abcdefghijklmnopqrstuvwx';
$request->targetType = 'image';
$request->targetMethod = 'convert-to-jpg';
$request->testMode = 'false';
$request->sourceUrl = 'http://whatever';
$ch = curl_init("http://api.online-convert.com/queue-insert");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('queue'=>$request->asXml()));
$response = curl_exec($ch);
// TODO: might want to test the response code here, see curl_get_info/CURLINFO_HTTP_CODE
curl_close ($ch);
  

затем вам нужно проанализировать ответ

 $queueAnswer = simplexml_load_string($response);
echo 'status code:', $queueAnswer->status->code;
// in case of success you should be able to access the values via
echo ' url:', queueAnswer->params->downloadUrl;
echo ' hash:', queueAnswer->params->hash;
  

Ответ №2:

Вы можете проанализировать XML-файл, используя это

 $xml=simplexml_load_string($response);
foreach($xml->children() AS $child)
{
     echo $child->getName().”:”.$child.”<br/>”;
}
  

Вы можете поставить условие if и извлечь только требуемое сообщение.

Комментарии:

1. Мне просто нужно получить значение <hash>, так что это будет: $xml=simplexml_load_string($response); for($xml->params AS $child) { echo $child->hash.”:”.$child.”<br/>”; }

2. foreach($xml->children() AS $child) { if($child->getName()=='params'){ foreach ($child->children() AS $paramChild){ if($paramChild->getName()=='hash'){ echo "hash value is ".$paramChild; } } } }

3. Приведенный выше код получит хэш-значение из ответа, который вы получили от сервера.