ECS3.0に続きECS4.0のXSLについて。
前回のエントリーのECS3.0のタグをECS4.0のタグに変えるだけで、簡単簡単・・・。
と、思ったら大間違い。
先に私の失敗談から。
まず、タグの名前を変えただけでは永遠に表示されません。
ECS4.0で返ってくるXMLのルートは
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2005-03-23">
と、名前空間(ネームスペース)が設定(と言う表現がよいのか宣言と言うのが良いのか)されています。
よってXSLでも名前空間を設定する必要があります。
私はこれで半日悩みました。
ま、ちゃんとAmazonのドキュメントを読めば(英語ですが)書いてあります。
初めはドキュメントの例題をそのままコピーしたんですが・・・。
これも嵌ります。
ドキュメントでは
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2004-03-19">
となってました。
Version 2005-03-23 のドキュメントでです。
XML/XSLTの常識から言えば当然なんでしょうが、(実はドキュメントにもそれらしいことは書いてありますが、なんせ英語なもんでナナメ読みって訳には・・・)リクエストのVersionは2005-03-23なので上の例だと名前空間がhttp://webservices.amazon.com/AWSECommerceService/
2004-03-19なので結局違うのでちゃんと表示されません。
当たり前と言えば当たり前なんですが、シロウトにしてみればドキュメントをコピー&ペーストしたくなりますし、XSL用の名前空間か?と思ってしまいました。
皆さん気をつけましょう。って私だけでしょうか・・・。
後もう一つは、これもちゃんとドキュメントや他のサイトの記事をちゃんと読んでいればよかったんですが、RESTのリクエスト文のイメージがあったのと、XSLの開発は先ずXMLをローカルドライブに保存して、試行錯誤して開発していたので、ローカルのXSLTエンジンを使う分には何の影響も無かったんですが、以前のエントリーで紹介したパラメーターだと、AmazonのXSLTエンジンがエラーを返してきます。
これもまた半日ぐらい悩みました。
結論を言いますと、パラメータが足らないんです。
ContentType=text/html
ってのが無かったため永遠にXSL変換できないところでした。
だってECS3.0の時はXSLファイルのURLを指定すればそれはXMLじゃ無くてXSL変換されたHTMLが帰ってくるようになっていたんですから!
単純に省略されたときのデフォルトがXMLになってただけだなんて・・・。
勘弁してくださいよ!
最近のコメント