Pages

2019年12月26日木曜日

[PHP] Amazon MWS API Feed のXMLをXSDファイルを利用してバリデート(検証)する

gontoraさんによる写真ACからの写真

Amazon MWS API を利用して出品する際にXMLで一覧を生成するのだが、その生成したXMLが正しいかを判別するために Amazon MWS API のドキュメントサイトで配布されている XSD を利用した。

http://docs.developer.amazonservices.com/ja_JP/feeds/Feeds_FeedType.html

注: XMLフィードの作成方法によっては、商品情報フィードではなく、アイテムフィードスキーマを使用するよう、出品者に求められます。

ほんまAmazon紛らわしいな。。
こんな紛らわしいのに開発環境提供してくれないし。。。

Item フィード
https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_1_9/Item.xsd

Product フィード
https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_1_9/Product.xsd

XSDを利用してのXML検証方法


  1. $xml = new DOMDocument();   
  2. libxml_use_internal_errors(true);  
  3.   
  4. $xml->load('./sample.xml');  
  5.    
  6. if ($xml->schemaValidate('./validate.xsd')) {   
  7.    echo "Success \n";  
  8. }   
  9. else {   
  10.     echo "Error \n";   
  11.     $errors = libxml_get_errors();  
  12.     foreach ($errors as $error) {  
  13.         echo display_xml_error($error$xml);  
  14.     }  
  15.     libxml_clear_errors();  
  16. }   
  17.   
  18. function display_xml_error($error$xml)  
  19. {  
  20.     $return  = $xml[$error->line - 1] . "\n";  
  21.   
  22.     switch ($error->level) {  
  23.         case LIBXML_ERR_WARNING:  
  24.             $return .= "Warning $error->code: ";  
  25.             break;  
  26.          case LIBXML_ERR_ERROR:  
  27.             $return .= "Error $error->code: ";  
  28.             break;  
  29.         case LIBXML_ERR_FATAL:  
  30.             $return .= "Fatal Error $error->code: ";  
  31.             break;  
  32.     }  
  33.   
  34.     $return .= trim($error->message) .  
  35.                "\n  Line: $error->line" .  
  36.                "\n  Column: $error->column";  
  37.   
  38.     if ($error->file) {  
  39.         $return .= "\n  File: $error->file";  
  40.     }  
  41. }  

Followers