2015-06-17 2 views
1

Я пытаюсь разобрать ниже XML, я попробовал множество различных решений, я представил пример того, что я попробовал. Я прочитал документы SimpleXML, и я все еще не могу получить это право. В Приведенном ниже примере все попытки, которые я пытаюсь сделать, это Echo out line в XML.Анализ XML в PHP с помощью SimpleXML

<?php 
$xmlstr = ' 
<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
<SubmitLeadResponse xmlns="https://test.com/"> 
<SubmitLeadResult> 
<Result>C</Result> 
<RedirectURL>https://testred.com</RedirectURL> 
<ApplicantID>123</ApplicantID> 
<ConfirmedPrice>0</ConfirmedPrice> 
<PotentialPrice>0</PotentialPrice> 
</SubmitLeadResult> 
</SubmitLeadResponse> 
</soap:Body> 
</soap:Envelope>' 
; 

?> 


<?php 

$SubmitLeadResponse = new SimpleXMLElement($xmlstr); 
echo $SubmitLeadResponse->SubmitLeadResult[0]->RedirectURL; 

?> 

ответ

0

Вы можете попробовать выполнить код fo r SimpleXML

<?php 
$xml ='<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
<SubmitLeadResponse xmlns="https://test.com/"> 
<SubmitLeadResult> 
<Result>C</Result> 
<RedirectURL>https://testred.com</RedirectURL> 
<ApplicantID>123</ApplicantID> 
<ConfirmedPrice>0</ConfirmedPrice> 
<PotentialPrice>0</PotentialPrice> 
</SubmitLeadResult> 
</SubmitLeadResponse> 
</soap:Body> 
</soap:Envelope>'; 
$get_xml = str_ireplace(['SOAP-ENV:', 'SOAP:'], '', $xml); 
$xml = simplexml_load_string($get_xml); 
print"<pre>"; 
print_r((string)$xml->Body->SubmitLeadResponse->SubmitLeadResult->RedirectURL); 
echo "<br /><br /><br />"; 
print_r($xml); 
?> 
+0

Hi @Chauhan, спасибо. Не могли бы вы добавить свой пример, если RedirectURL содержит URL-адрес, который он перенаправляет на сайт www.test.com, и если он этого не делает, тогда эхо «Failed» – xTrifactorx

+0

$ getRedirectUrl = (строка) $ xml-> Body-> SubmitLeadResponse-> SubmitLeadResult -> RedirectURL; if ($ getRedirectUrl) { \t header ("location:". $ GetRedirectUrl); } else { \t echo "Failed"; } Добавьте эту строку после $ xml = simplexml_load_string ($ get_xml); –

+0

Большое вам спасибо, если я могу задать вам один последний вопрос, пожалуйста, обещаю. Как сделать: IF Result = C, затем перенаправить с использованием URL-адреса переадресации, IF Result - любое другое значение echo Failed. Большое вам спасибо: D – xTrifactorx

0

Я немного изменил свой код. Вот рабочий образец, чтобы получить RedirectURL:

<?php 
$xmlstr = '<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
<SubmitLeadResponse xmlns="https://test.com/"> 
<SubmitLeadResult> 
<Result>C</Result> 
<RedirectURL>https://testred.com</RedirectURL> 
<ApplicantID>123</ApplicantID> 
<ConfirmedPrice>0</ConfirmedPrice> 
<PotentialPrice>0</PotentialPrice> 
</SubmitLeadResult> 
</SubmitLeadResponse> 
</soap:Body> 
</soap:Envelope>'; 

$doc = new DOMDocument(); 
$doc->loadXML($xmlstr); 

$RedirectURL = $doc->getElementsByTagName("RedirectURL"); 
$RedirectURL = $LoginResults->item(0)->nodeValue; 

var_dump($RedirectURL); 

образца, предоставляемое из этого источника: There are also more informations to reading SOAP-envelopes without a soapclient

Обратите внимание, что это хорошая практика, чтобы опустить закрывающий PHP тег и остаться в PHP-контексте как можно дольше чтобы избежать неожиданных выходов (linebreaks).

0

Ваш XML содержит элементы с именами, поэтому это немного сложнее разобрать. Это может быть сделано путем передачи значения пространства имен для children() следующим образом:

Codepad demo

$SubmitLeadResponse = new SimpleXMLElement($xmlstr); 
echo (string)$SubmitLeadResponse 
      ->children('http://schemas.xmlsoap.org/soap/envelope/') 
      ->Body 
      ->children('https://test.com/') 
      ->SubmitLeadResponse 
      ->SubmitLeadResult 
      ->RedirectURL; 

Выходы

https://testred.com 

Примечание: SimpleXML не нравятся новые строки до строки XML, так что удалить новая линия, составляющая ее:

$xmlstr = '<?xml version="1.0" encoding="utf-8"?> 
Смежные вопросы