2012-05-06 4 views
4

Я использую NuSoap для webservice. В ответ я получаю 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 нагрузки строка]: Entity: строка 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- нагрузки строка]:^в C: \ XAMPP \ HTDOCS \ test.php в строке 38

Пожалуйста, помогите мне, если какой-либо один есть знать ..

-itin

ответ

1

Похоже, вы не доступа к объектам 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); 
    } 
    } 

}