Там написано:
<GetUserActivityDataResponse xmlns="http://webservices.website.net/">
, и вы пытаетесь сделать
$basePath = $soapEnvelope
->children('soap', true)
->Body
->GetUserActivityDataResponse
…
, что означает, что вы пытаетесь получить <soap:GetUserActivityDataResponse>
, который, очевидно, не существует.Вы должны сделать ( demo )
$basePath = $soapEnvelope
->children('soap', true)
->Body
->children('http://webservices.website.net/')
->GetUserActivityDataResponse
->GetUserActivityDataResult
->ActArray
->ACT;
На самом деле, вы могли бы просто сделать ->children()
, чтобы вернуться к пространству имен по умолчанию, но я считаю, что предоставление пространства имен явно несколько яснее.Ваш выбор.
Ваш XPath не работает, потому что вы не указали пространство имен для ActArray
.Кроме того, если xpath()
успешно, он возвращает массив SimpleXmlElements.Вы пробовали array->ACT
, который не работает, потому что массив не является объектом.Первый ActArray
находится в $basePath[0]
.Поэтому вам нужно настроить код на
$basePath = $soapEnvelope->xpath('//ns:GetUserActivityDataResult/ns:ActArray');
foreach ($basePath[0]->ACT as $userActivity) {
…
Чтобы получить элементы ACT напрямую, измените XPath на
//ns:GetUserActivityDataResult/ns:ActArray/ns:ACT