php用DOM解剖xml取值

透過API對接第三方服務時,有時會遇到對方回傳是XML的資料格式,在PHP上可採用SimpleXML或DOM來進行解剖並取出節點資料。有關SimpleXML解析請閱讀「讓PHP順利解剖XML取出節點資料

當XML資料採用XML Namespace (xmlns)時,通常SimplyXML解剖時會出現錯誤,這時建議用DOM來處理。

處理示範

●◎ ~將XML資料存在變數上
  • $xml="<?xml version='1.0' encoding='utf-8'?> 
  • <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> 
      •  <IsAuthenticateResponse xmlns='https://services.test.net'> 
        •  <IsAuthenticateResult> 
          • <GUID>12345678</GUID> 
          • <ErrorCode>0</ErrorCode> 
          • <IPAddress>127.0.0.1</IPAddress> 
          • <IsExtend>true</IsExtend> 
          • <IsSucceed>false</IsSucceed> 
        •  </IsAuthenticateResult> 
      •  </IsAuthenticateResponse> 
    •  </soap:Body> 
  • </soap:Envelope>";
●◎ ~解剖資料
  • $doc=new DOMDocument();
  • $doc->loadXML($xml);
●◎ ~取出節點資料
  • $doc->getElementsByTagName(節點名稱)->item(0)->nodeValue;
●◎ ~顯示節點資料範例
  • 顯示IsSucceed結果
  • echo $doc->getElementsByTagName("IsSucceed")->item(0)->nodeValue;
    顯示:false


一般解析錯誤處理

  • 檢查XML資料格式是否正確
  • 格式正確但仍出現錯誤時,檢查節點標籤內是否含有diffgrid
    若有diffgrid宣告,通常這是多筆資料結構
    這部份以另一篇文章來說明






這個網誌中的熱門文章

沒印表機沒關係 便利商店找印去

被時代淘汱的英文怎麼說

探訪神秘的烏法魯神殿

色情廣告視窗關不掉? 動手解解看吧~

玩轉水晶石工作室 妝點個人部落