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 не может разобрать, когда присутствует конверт с мылом.

Увидеть ниже:

PHP - SimpleXML не возвращает объект

Другие вопросы по тегам