разбор нестандартного xml

antonim

Новичок
разбор нестандартного xml

добрый день. Обмениваюсь данными через xml запросы с сервером. Сервер присылает не стандартную структуру xml, так что simplexml на:

$xml = simplexml_load_string($string);
var_dump($xml);

говорит мол пусто: object(SimpleXMLElement)#3 (0) {}

-~{}~ 16.09.09 16:01:

вот что храниться в $string:

<?xml version="1.0" encoding="cp1251"?><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><ValidatePhoneResponse xmlns="http://test.com.ua/"><ValidatePhoneResult xsi:type="ErrorMessageResponse"><ErrorCode>22</ErrorCode><ErrorMessage>В экземпляре объекта не задана ссылка на объект.</ErrorMessage></ValidatePhoneResult></ValidatePhoneResponse></soap:Body></soap:Envelope>
 

antonim

Новичок
Автор оригинала: FractalizeR
А что такого нестандартного в этом XML? namespaces разве что

http://e-mats.org/2009/08/parsing-xml-with-namespaces-with-simplexml/
не понимаю этой ссылки т.к. в ней используется SimpleXMLElement

а при

$sxml = new SimpleXMLElement($string);
var_dump($sxml);

возвращается object(SimpleXMLElement)#3 (0) {} т.е. DOM не построен... о чем дальше тут говорить?? нужно каким-то образом сделать из данного xml с soap пральный DOM

-~{}~ 17.09.09 11:08:

пока извратился поубивал регуляркой все левое и разобрал как обычный DOM конечно это не оч прально, но пока сделал так..
 

Crys

Двинутый новичок
возвращается object(SimpleXMLElement)#3 (0) {} т.е. DOM не построен...
На основании чего ты определил, что в SimpleXMLElement ничего не загрузилось?

-~{}~ 17.09.09 11:28:

В догонку

Код:
$string = '<?xml version="1.0" encoding="cp1251"?><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><ValidatePhoneResponse xmlns="http://test.com.ua/"><ValidatePhoneResult xsi:type="ErrorMessageResponse"><ErrorCode>22</ErrorCode><ErrorMessage>В экземпляре объекта не задана ссылка на объект.</ErrorMessage></ValidatePhoneResult></ValidatePhoneResponse></soap:Body></soap:Envelope>';
$sxml = new SimpleXMLElement($string);
print '<pre>';
var_dump($sxml);
foreach($sxml->children('http://schemas.xmlsoap.org/soap/envelope/') as $el)
{
    if ($el->getName() == 'Body')
    {
		foreach ($el->children() as $sel) {
			var_dump(strval($sel->ValidatePhoneResult->ErrorCode));
		}
    }
}
Output
Код:
object(SimpleXMLElement)#1 (0) {
}
string(2) "22"
Ай-я-яй.. Ничего не работаеет :(
 

DiMA

php.spb.ru
Команда форума
а фигли, я - парщу

текст, пришедший через соап, нуждается в мелких правках, чтобы потом new SimpleXMLElement не падал от невалидного формата

кривой текст выдают MS сервера
 
Сверху