Nusoap: анализ XML с ошибкой в пространстве имен
Я использую NuSoap для веб-сервиса. В ответ я получаю XML с пространством имен что-то вроде:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<Action xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none" s:mustUnderstand="1">ABC.CS.Ia.Cts.Ees.Au/IAuth/A</Action>
</s:Header>
<s:Body>
<A xmlns="ABC.CS.Ia.Cts.Ees.Au">
<Au xmlns:d1="ABC.CS.Ia.Cts.Ees.Au" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<d1:Res>Q1</d1:Res>
<d1:n>jFn</d1:n>
</Au>
</A>
</s:Body>
</s:Envelope>
$ xml_feed = simplexml_load_string ($ xmlString);
Теперь я хочу разобрать это. Я использовал функцию simplexml_load_string, но получаю предупреждение, и функция ничего не возвращает.
Предупреждение: simplexml_load_string() [function.simplexml-load-string]: Объект: строка 7: предупреждение синтаксического анализатора: xmlns: URI BC.CS.Ia.Cts.Ees.Au не является абсолютным в C:\xampp\htdocs\test.php в строке 38 Предупреждение: simplexml_load_string() [function.simplexml-load-string]: в C: \ xampp \ htdocs \ test.php в строке 38 Предупреждение: simplexml_load_string() [function.simplexml-load-string]: ^ in C:\xampp\htdocs\test.php в строке 38
Пожалуйста, помогите мне, если кто-нибудь знает..
-это внутри
2 ответа
Похоже, что вы не обращаетесь к объектам XML правильно, эта функция будет правильно получать дочерние элементы xpath:
function parseSOAPXmlTest($str) {
//parse xml
$xml = simplexml_load_string($str);
echo "xml=" . print_r($xml, true);
if( $xml === false ) { throw new Exception("OBJ is malformed!"); }
foreach($xml->xpath('//s:Header') as $header) {
if( empty($header) ) { throw new Exception("Header is malformed or missing!"); }
echo "header=" . print_r($header, true);
}
foreach($xml->xpath('//s:Body') as $body) {
if( empty($body) ) { throw new Exception("Body is malformed or missing!"); }
echo "body=" . print_r($body, true);
foreach($body->A->Au->xpath('//d1:Res') as $Reschild) {
echo "Reschild=" . print_r($Reschild, true);
}
foreach($body->A->Au->xpath('//d1:n') as $nchild) {
echo "nchild=" . print_r($nchild, true);
}
}
}
SimpleXML не может разобрать, когда присутствует конверт с мылом.
Увидеть ниже: