4

Web サービスに 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 で絶対ではありません。 38 行目の php 警告: simplexml_load_string() [function.simplexml-load-string]: in C:\xampp\htdocs\test.php 行 38 警告: simplexml_load_string() [function.simplexml-load-string]: ^ in C:\xampp\htdocs\test.php 38行目

どなたかご存知の方いましたら教えてください..

-itin

4

2 に答える 2

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);  
     }
  }

}

于 2015-07-29T20:54:31.600 に答える
0

SOAP エンベロープが存在する場合、SimpleXML は解析できません。

下記参照:

PHP - SimpleXML がオブジェクトを返さない

于 2012-05-13T15:43:10.277 に答える