Не удается получить данные из XML с пространствами имен

Я делаю запрос на мыло и получаю следующий ответ:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://*************/******/****" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://*************/******/****/***">
<SOAP-ENV:Body>
<ns1:GetEventV2Response>
<ns1:GetEventV2Result>
<ns1:Events>
<ns1:Event>
<ns1:Id>147624</ns1:Id>
<ns1:Name>Rockstars</ns1:Name>
<ns1:Genre>
...

Я пытался получить идентификатор элемента внутри <ns1:Event>, но код ниже не работает и не знаю почему. Я искал и пробовал несколько решений, но безуспешно.

header("Content-type: text/xml");
....
$response = curl_exec($ch);
curl_close($ch);
x = new SimpleXmlElement($response);
foreach($x->xpath('//ns1:Event') as $event) {
var_export($event->xpath('ns1:Id'));
}

0

Решение

почему бы тебе не попробовать это?

$xml = simplexml_load_string($xml);
$xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/');
foreach ($xml->xpath('//ns1:Event') as $item)
{
print_r($item);
}

http://php.net/manual/en/function.simplexml-load-string.php

1

Другие решения

использование SimpleXMLElement :: registerXPathNamespace зарегистрировать пространство имен. Например:

$x->registerXPathNamespace('ns1', 'http://*************/******/****');

и позже:

$event->registerXPathNamespace('ns1', 'http://*************/******/****');
1

По вопросам рекламы [email protected]