如何在php中解析soap xml响应并从字符串中获取信息

Posted

技术标签:

【中文标题】如何在php中解析soap xml响应并从字符串中获取信息【英文标题】:How to parse soap xml response in php and get the information from the string 【发布时间】:2016-05-06 22:17:51 【问题描述】:

我在从 SOAP 响应中提取信息时遇到了一些问题。 这是我得到的回复:

<?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>
- <GetInfoFromSendingResponse xmlns="http://test.test.com/">
  <GetInfoFromSendingResult>"SendingID":"2468","Subject":"Test","ID":"2468","CampaignID":"890","ForwardAddress":"test@test.ro","SendingTime":"1/14/2016 8:00:00 AM","SendLeadsToEmail":"0","LanguageID":"6","LeadsTestMode":true,"WebversionLink":"","Language":"FR"</GetInfoFromSendingResult> 
  </GetInfoFromSendingResponse>
  </soap:Body>
  </soap:Envelope>

我需要来自GetInfoFromSendingResult 的信息并将其存储在一个变量中,以便我可以使用该信息。

示例:根据 SOAP 响应中提供的 "Language" 信息更改表单的语言。任何帮助表示赞赏。

【问题讨论】:

您可以通过多种方式做到这一点。你有没有尝试过? 【参考方案1】:

另一个可能的解决方案是使用例如SimpleXML。您可以注册命名空间并使用xpath 表达式:

$source = <<<SOURCE
<?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>
        <GetInfoFromSendingResponse xmlns="http://test.test.com/">
            <GetInfoFromSendingResult>"SendingID":"2468","Subject":"Test","ID":"2468","CampaignID":"890","ForwardAddress":"test@test.ro","SendingTime":"1/14/2016 8:00:00 AM","SendLeadsToEmail":"0","LanguageID":"6","LeadsTestMode":true,"WebversionLink":"","Language":"FR"</GetInfoFromSendingResult>
        </GetInfoFromSendingResponse>
    </soap:Body>
</soap:Envelope>
SOURCE;

$xml = simplexml_load_string($source);
$xml->registerXPathNamespace('test', 'http://test.test.com/');
$elements = $xml->xpath('//soap:Envelope/soap:Body/test:GetInfoFromSendingResponse/test:GetInfoFromSendingResult');
$result = json_decode($elements[0], true);
print_r($result);

将导致:

Array
(
    [SendingID] => 2468
    [Subject] => Test
    [ID] => 2468
    [CampaignID] => 890
    [ForwardAddress] => test@test.ro
    [SendingTime] => 1/14/2016 8:00:00 AM
    [SendLeadsToEmail] => 0
    [LanguageID] => 6
    [LeadsTestMode] => 1
    [WebversionLink] => 
    [Language] => FR
)

【讨论】:

【参考方案2】:

您可以使用php 5.0+版本自带的SoapClient

$client = new SoapClient("http://test.test.com/?wsdl");
$res = $client->SoapFunction(array('param1'=>'value','param2'=>'value'));
echo $res->GetInfoFromSendingResponse->GetInfoFromSendingResult;

那么您可能需要 JSON 解码来获取其中的一些特定值。

【讨论】:

除了 php 手册之外,我还有什么网站可以找到关于如何使用 SOAP + 示例的教程或大量信息

以上是关于如何在php中解析soap xml响应并从字符串中获取信息的主要内容,如果未能解决你的问题,请参考以下文章

如何解析响应 xml 字符串?

如何从 PHP 中的以下 SOAP XML 响应中获取 pinBlocked 标记

解析 XML SOAP 响应 C#

使用Savon和Nokogiri在Rails中解析XML SOAP响应的内存不足

如何解析 xml 并从 xml 字符串中获取数据?

在 Swift 中解析多部分 SOAP 响应