2015-07-20 4 views
1

Я отправил запрос на завивание. Мой кодКак получить значение узла xml php

$URL = "http://demo.com"; 

      $ch = curl_init($URL); 
      curl_setopt($ch, CURLOPT_MUTE, 1); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
      curl_setopt($ch, CURLOPT_POST, 1); 
      curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml')); 
      curl_setopt($ch, CURLOPT_POSTFIELDS, "$xmlLeadCloud"); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
      $output = curl_exec($ch); 

      curl_close($ch); 

Ниже я получаю XML в $output переменной.

<?xml version="1.0" encoding="utf-16"?> 
<LeadCloud> 
    <InsuranceSvcRs> 
     <PersHealthPolicyQuoteInqRs> 
      <MsgStatus> 
       <MsgStatusCd>Success</MsgStatusCd> 
       <Payout>17.40</Payout> 
       <BuyerLeadId>4ded4da790c6fasasasas322</BuyerLeadId> 
       <BuyerId>34</BuyerId> 
      </MsgStatus> 
     </PersHealthPolicyQuoteInqRs> 
    </InsuranceSvcRs> 
</LeadCloud> 

Как я могу получить значение MsgStatusCd элемента из него. До сих пор я пробовал.

$s = new SimpleXMLElement($output); 
echo $s->InsuranceSvcRs->PersHealthPolicyQuoteInqRs->MsgStatus->MsgStatusCd; die; //not working 
+0

, и вы делаете все правильно, в чем проблема? – Viral

+0

Не отображается вывод '$ s-> InsuranceSvcRs-> PersHealthPolicyQuoteInqRs-> MsgStatus-> MsgStatusCd;' В моем случае он должен показывать 'Success' – Vineet

+0

У вас есть сообщение об ошибках? Получение сообщения 'SimpleXMLElement :: __ construct(): Entity: строка 1: ошибка парсера: документ с надписью UTF-16, но имеет содержимое UTF-8 в' .. – chris85

ответ

2

Cast выход в строку, чтобы получить его значение:

echo (string) $xml->InsuranceSvcRs->PersHealthPolicyQuoteInqRs->MsgStatus->MsgStatusCd; 

Вы можете видеть из this demo, где она печатает:

Success 
+0

Вы никогда не должны писать такой код против внешних API, подверженных изменениям. Такой код неизбежно приведет к «попытке получить свойство не-объекта», и в результате вы потеряете контроль над своим кодовым путем, введя исключительное состояние, в котором не должно быть ни одного. – Matiss

+0

@nickb Это не работает в моем случае. Не могли бы вы предложить мне другой способ? – Vineet

+0

@ Вине кодирование XML отбрасывает. Демонстрация здесь изменила кодировку XML в utf8. – chris85

0

Вы можете использовать XPath для доступа к этим данным (см. PHP manual запись).

Причины, почему ваша сбруя не работает в том, что XML вы получаете это массив данных, следовательно,

<?xml version="1.0" encoding="utf-16"?> 
<LeadCloud> <!-- ROOT --> 
    <InsuranceSvcRs> <!-- Zero or more --> 
     <PersHealthPolicyQuoteInqRs> <!-- Zero or more --> 
      <MsgStatus> <!-- Zero or more --> 
       <MsgStatusCd>Success</MsgStatusCd> <!-- Zero or one --> 
       <Payout>17.40</Payout> <!-- Zero or one --> 
       <BuyerLeadId>4ded4da790c6fasasasas322</BuyerLeadId> <!-- Zero or one --> 
       <BuyerId>34</BuyerId> <!-- Zero or one --> 
      </MsgStatus> 
     </PersHealthPolicyQuoteInqRs> 
    </InsuranceSvcRs> 
</LeadCloud> 

и должен быть доступен как таковые.

Смежные вопросы