#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. Приведенный выше код получит хэш-значение из ответа, который вы получили от сервера.