SOAP响应对象缺少属性标签,除非转换为字符串

时间:2019-01-31 20:49:33

标签: php xml soap

我正在使用返回SOAP响应的Web服务。我希望遍历整个结果集并根据属性值执行操作。

由于SOAP客户端返回了stdClass的对象,因此我首先尝试直接在该对象上进行迭代,但是它似乎缺少属性标签。

接下来,我尝试调用__getLastResponse()以将响应视为字符串。现在出现了属性标签,但是数据是一个巨大的字符串,我无法对其进行迭代。

最后,我尝试使用simplexml_load_string将此响应字符串转换为另一个对象,并定义SOAP名称空间。现在,所有数据仍然存在,但是再次缺少属性标签。

try {
    $client = new soapClient($wsdl, array('trace' => $trace, 'exceptions' => $exceptions));
    $response = $client->GetAllBookings($xmlArray);
}
catch (Exception $soapError) {
    echo "ERROR: " . $soapError->getMessage();
    echo "Last response: " . $client->__getLastResponse();
    exit();
}

以下是一些示例输出...

echo "<pre>";
print_r($response);
echo "</pre>";

产量...

stdClass Object
(
[GetAllBookingsResult] => 

2019-01-31T00:00:00
2019-01-31T00:00:00
B&E Kincaid Auditorium
2019-01-31T08:00:00
2019-01-31T09:15:00
Registrar (Internal Use Only)
ECO-202-001 PRINCIPLES OF ECO II
As Is/Standard Setup
164

...缺少数据标签。 (var_dump中也缺少属性名称);

$responseString = $client->__getLastResponse();
echo "<pre>";
print_r($responseString);
echo "</pre>";

产量...

<?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><GetAllBookingsResponse xmlns="http://DEA.EMS.API.Web.Service/"><GetAllBookingsResult>
    <Bookings>
      <Data>
        <BookingDate>2019-01-31T00:00:00</BookingDate>
        <StartBookingDate>2019-01-31T00:00:00</StartBookingDate>
        <RoomDescription>B&amp;E Kincaid Auditorium</RoomDescription>
        <TimeEventStart>2019-01-31T08:00:00</TimeEventStart>
        <TimeEventEnd>2019-01-31T09:15:00</TimeEventEnd>
        <GroupName>Registrar (Internal Use Only)</GroupName>
        <EventName>ECO-202-001 PRINCIPLES OF ECO II</EventName>
        <SetupTypeDescription>As Is/Standard Setup</SetupTypeDescription>
        <SetupCount>164</SetupCount>

...这是相同的数据,但包装在属性标签中。这种格式看起来像我想要的格式,但这是一个字符串,不是foreach循环的有效参数,也不是对象。因此,我尝试使用以下方法创建一个simpleXML对象...

define('XML_SOAP_NAMESPACE', 'http://schemas.xmlsoap.org/soap/envelope/');
$simpleXMLObject = simplexml_load_string($responseString);
$simpleXMLArray = $simpleXMLObject->children(XML_SOAP_NAMESPACE)->Body->children();
echo "<pre>";
print_r($simpleXMLArray);
echo "</pre>";

产生...

SimpleXMLElement Object
(
    [GetAllBookingsResponse] => SimpleXMLElement Object
        (
            [GetAllBookingsResult] => 

    2019-01-31T00:00:00
    2019-01-31T00:00:00
    B&E Kincaid Auditorium
    2019-01-31T08:00:00
    2019-01-31T09:15:00
    Registrar (Internal Use Only)
    ECO-202-001 PRINCIPLES OF ECO II
    As Is/Standard Setup
    164

...又回到了平方,没有属性标签,也没有明显的方法可以迭代各种API请求的结果集(我们的响应不会严格格式化,我们确实需要能够确定属性)。

有人能指出我正确的方向吗?我真的只是希望能够遍历结果中的每个预订,并在预订类型等于x时执行某些操作,而在建筑代码等于y时执行某些操作,等等。

0 个答案:

没有答案