XML > PHP только в исходном коде

#php #xml

#php #xml

Вопрос:

У меня небольшая проблема, из-за которой API, который я использую для части моего сервиса, использует статистику rsp для обработки сообщений об успехе / ошибках в XML.

Итак, мы используем форму для публикации данных, и она возвращает данные, подобные следующему примеру:

<rsp stat="ok"> 
 <сообщение об успешном завершении="принято" transactionid="505eeb9c43969d4919c0a6b3f7a4dfbb" messageid="a92eff8d65cf48e9c6e96702a7b07400"/> 
</rsp>

Ниже приведена большая часть используемого скрипта :

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
 // Задача: Замените заполнители в скобках вашими данными.
 // Например - curl_setopt($ch, CURLOPT_UsERPWD, 'SMSUser:PassW0rD#');
curl_setopt($ch, CURLOPT_USERPWD, ");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
$xml = curl_exec($ch);
if (curl_error($ch)) { 
выведите "ОШИБКА ". curl_error($ch) ."n
"; } curl_close($ch); print_r($xml);

Единственная проблема заключается в том, что когда он анализируется и отображается с помощью команды print_r , по какой-то странной причине он отображается только через исходный код, и мы понятия не имеем, как отобразить его через страницу

В принципе, мы хотели бы систему, в которой, если rsp stat = «ok», то «Отправлено», иначе «не отправлено».

Ответ №1:

Ну, простой способ мог бы быть:

 if (strpos($xml, 'stat="ok"') !== false) {
    echo "sent";
} else {
    echo "unsent";
}
  

http://codepad.org/pkzsfsMk

Это заменило бы print($xml); .

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

1. if((@DOMDocument::loadHTML($xml))->getElementsByTagName(«rsp»)->item(0)->getAttribute(«stat»)===’ok’){ echo ‘отправлено’;}else{echo ‘неотправлено’; выдает new RuntimException(‘неожиданный ответ статистики: ‘.(@DOMDocument::loadHTML($xml))->getElementsByTagName(«rsp»)->item(0)-> getAttribute(«статистика»));}

Ответ №2:

Поместите этот код в функцию, и пусть функция вернет ваш $ xml.

Предполагая, что у вас есть функция с именем getRspStat(), вы могли бы просто сделать что-то вроде:

       echo getRspStat();
  

Ответ №3:

Если вы сделаете что-то подобное:

(смотрите также на CodePad.org )

 function xmlRequestWasSuccessful($xml) {
    $result = simplexml_load_string($xml);
    $result = (string)$result['stat'];
    if ($result == 'ok') {
        return true;
    } else {
        return false;
    }
}

$xml = '<rsp stat="ok">
<success msg="accepted" transactionid="505eeb9c43969d4919c0a6b3f7a4dfbb" messageid="a92eff8d65cf48e9c6e96702a7b07400"/>
</rsp>';

$stat = xmlRequestWasSuccessful($xml);
  

в результате вы получите логическое значение ‘true’ ( $stat переменная). Адаптируйте его для поддержки случая, когда возникает ошибка. Поскольку нет подробностей о том, как это выглядит при возникновении ошибки, вот как вы можете сделать это сейчас:

 if ($stat) {
    // do something on success ('sent' something)
} else {
    // do something on success (display 'unsent' message for example)
}