amazonECS4.0でxmlをhtmlに変換できません

このQ&Aのポイント
  • amazonECS4.0を利用してRESTリクエスト通信により返ってきたXMLをXSLTによりHTMLに変換したいのですが、うまく行きません
  • xmlにて戻ってきたタイトル情報のみを表示させようとしている、xslをアップロードしているのですが、うまくいきません
  • このXMLに対してタイトル情報と画像情報のみを抜き出して表示出来るようなXSLソースを求めています
回答を見る
  • ベストアンサー

amazonECS4.0 XMLをHTMLに変換出来ません

amazonECS4.0を利用してRESTリクエスト通信により返ってきたXMLをXSLTによりHTMLに変換したいのですが、うまく行きません... ■解決してほしい点 xmlにて戻ってきたタイトル情報のみを表示させようとしている、xslをアップロードしているのですが、うまくいきません。。。 まずは特定の情報のみを抜き出して表示する方法を知りたいのですが、分かる方いらっしゃいますでしょうか? このXMLに対してタイトル情報と画像情報のみを抜き出して表示出来るようなXSLソースを求めています。 XML、XSL以前にamazonECS4.0的におかしな記述がありましたら、そちらもご指摘お願いします。 ※環境等 サーバー名 s285.xrea.com Apache 1.3.37 PHP 5.1.6 PEARの使用は考えていません。 よろしくお願いします。 ■XML出力URL http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&SubscriptionId=09CD3TD99AGC2WFY5582&Operation=ItemSearch&Keywords=web&IdType=ASIN&ResponseGroup=Small&SearchIndex=Books&ContentType=text/xml ■HTML出力URL http://xml-jp.amznxslt.com/onca/xml?Service=AWSECommerceService&SubscriptionId=09CD3TD99AGC2WFY5582&Operation=ItemSearch&Keywords=web&IdType=ASIN&ResponseGroup=Small&SearchIndex=Books&ContentType=text%2Fhtml&Style=http%3A%2F%2Fspunkyweb.net%2Famazon%2Famazon%5F2.xsl ■XSL文書URL http://spunkyweb.net/amazon/amazon_2.xsl

  • XML
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>どこかおかしな点がありますでしょうか? 指摘しようとしたら実はわからなかったので,敢えて検討せずにごまかしてました。ちぇー許してくれないか。 手元での検証の結果とそれを元にした検証でひとつはっきりしました。 ====================== http://developer.mozilla.org/ja/docs/Introduction_to_using_XPath_in_JavaScript >注意すべきなのは、【XPath では接頭辞のない QName は名前空間が null の要素にのみマッチすると定義されている】という点です。XPath にはデフォルト名前空間を取得する手段はありません。名前空間が null ではない要素や属性にマッチさせるには、接頭辞付きの名前テストを使い、その接頭辞を名前空間にマッピングする名前空間リゾルバを作成する必要があります。詳しくは下記のユーザ定義の名前空間リゾルバを作成する方法を参照して下さい。 ================= だそうです 現に手元の別ソースのamazon名前空間接頭辞をデフォルト名前空間にして取り除いたら結果が異なりました(汗 あとはほとんど影響ありません。前回の回答の地点でわかっていた内容ばかりです 「Item要素の直接の子としてTitle要素は存在しないので,<xsl:value-of select="ItemAttributes/Title" />としないとならない点。 それから,xsl:apply-templatesのselectを省略したときは その全ての子要素(【OperationRequest要素を含みます!!】)にテンプレートルールを適用する ビルトインテンプレートのおかげで、xsl:value-of要素のselect属性でテキストノードを指定しなくてもそのテキストが表示されます http://www.asahi-net.or.jp/~PS8A-OKZK/xml/xslt10_1/builtin_template.html http://www.asahi-net.or.jp/~ps8a-okzk/xml/memo/memo_xslt.html 上記で述べたことを考えると,これはRequestId要素のテキストノードやRequestProcessingTime要素のテキストノードにも適用されていますので注意!

その他の回答 (1)

回答No.1

==============xsl.xsl=============== <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:amazon="http://webservices.amazon.com/AWSECommerceService/2005-10-05" xmlns="http://www.w3.org/1999/xhtml" exclude-result-prefixes="amazon" > <!-- 「名前空間なし」 と 「名前空間が指定されたデフォルト名前空間」 は明確に異なる。match属性やselect属性等に指定されるXPathも 名前空間接頭辞をつける必要があるので注意。 Firefoxのソース表示では名前空間宣言が表示されないようなので 気づきにくい。注意。 --> <!-- 個人的な好みからmethodはxmlに変更している script要素等をhead要素に埋め込むときには注意すること。(#PCDATA) 個人的には外部のファイルにすることを強く勧める。 --> <xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" indent="yes" /> <xsl:template match="/amazon:ItemSearchResponse"> <html lang="ja"> <head> <link rel="stylesheet" href="normal.css" type="text/css" media="screen"/> <!-- オフラインで実験しているが,質問者様のサーバによってはCSSファイルが同一サーバ同一ディレクトリに配置できないかも その場合はもちろんhref属性を書き換えること --> </head> <body> <xsl:apply-templates select="amazon:Items/amazon:Item"/> </body> </html> </xsl:template> <!-- xsl:for-eachを使わない記法にした。使ったときの方法がわからんかったので(汗--> <xsl:template match="amazon:Item"> <p class="Itemtitle"><xsl:value-of select="amazon:ItemAttributes/amazon:Title" /></p> <!-- font要素を撤廃し,class属性を付与,外部CSSによって,見た目を制御する。--> </xsl:template> </xsl:stylesheet> =====normal.css============ @charset "UTF-8"; .Itemtitle{ color:#FF0000; }

takeya4649
質問者

補足

ご回答ありがとうございました。 http://spunkyweb.net/amazon/index_test.html の3というリンクで上記のxslを利用しているのですが、 http://spunkyweb.net/amazon/amazon_2.xsl と同じくタイトル以外もダッーと表示されてしまいます。。。 どこかおかしな点がありますでしょうか? まずは特定の情報のみを抜き出して表示する方法を知りたいのです。 よろしくお願いします。

関連するQ&A

  • Amazon の WEB サービス(REST)でエラー

    AmazonのWEBサービスで、アクセスキーを取得して、 ブラウザから以下のURLを投げたのですが、エラー がかえってきてしまいます。いろいろ調べたのですが 原因がわかりません。どなたかご教示いただければ 大変助かります。 (Perl関連の本を探そうとしました) http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=xxxxxxxxx&Operation=ItemSearch&SearchIndex=Books&Keywords=Perl

    • 締切済み
    • XML
  • amazonAPI XSLによるHTML変換エラー

    どなたかご教授頂けたら幸いです。 ※Styleを指定しない場合はxmlが正常に返ってきます。 ※アクセスキーは正確に入力しています。 【エラー内容】 <?xml version="1.0"?> <ItemSearchErrorResponse xmlns="http://ecs.amazonaws.com/doc/2011-08-01/"><Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message></Error><RequestId>607e93a3-0c6e-44ce-a354-c4c2e1c555cd</RequestId></ItemSearchErrorResponse> 【リクエスト】 http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService &AWSAccessKeyId=〇〇〇〇〇〇〇〇〇〇〇〇 &AssociateTag=〇〇〇〇〇〇〇 &Version=2011-08-01 &ResponseGroup=Small &Operation=ItemSearch &SearchIndex=Books &Keywords=質問 &ContentType=text/html &Style=http://www.〇〇〇〇〇.com/sample.xsl (←複数のサーバで試行も不可) ↓ここで署名生成されたSigned URLにてリクエスト http://associates-amazon.s3.amazonaws.com/signed-requests/helper/index.html 【xsl】 ================================================================================== <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2011-08-01" version="1.0"> <xsl:output method="html" encoding="UTF-8"/> <xsl:template match="/"> <html lang="ja"> <head> <title>テスト</title> </head> <body> <xsl:apply-templates select="aws:ItemSearchResponse/aws:Items/aws:Item"/> </body> </html> </xsl:template> <xsl:template match="aws:ItemSearchResponse/aws:Items/aws:Item"> <p> [タイトル] <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="aws:DetailPageURL" /> </xsl:attribute> <xsl:value-of select="aws:ItemAttributes/aws:Title" /> </xsl:element> [著者] <xsl:value-of select="aws:ItemAttributes/aws:Author" /> </p> </xsl:template> </xsl:stylesheet> ================================================================================== Styleを指定しない場合はxmlが正常に返ってくるのでxslに問題があるのではと思い、 amazonで色々調べましたが、何も発見できませんでした。 宜しくお願いします。

    • 締切済み
    • XML
  • アマゾンWEBサービスのデータを自分のドメイン中で表示したい

    本日「WEBサイトコンテンツ増強テクニック」という本を買いました それで実際自分のHPにアマゾンの書籍を載せるように 作成してみました aaというボタンを押すと アマゾンの本の詳細に進みますがこのページは 私のドメインではなく http://xml-jp.amznxslt.com/onca/xml?Service=AWSECommerceService&SubscriptionId=1QGE というドメインでの表示となっております アマゾンのデータを取得し、私のドメイン名(私のページ)で 詳細データ(値段、レビューなど)を記載したいのですが どのようにしたら良いでしょうか? 例を挙げると「はてな」があります 以下のページは「はてな」のドメインで アマゾンの本を紹介しています http://b.hatena.ne.jp/asin http://b.hatena.ne.jp/から始まるドメインですが アマゾンの詳細データを取得できており、 http://b.hatena.ne.jp/上にアマゾンの詳細データが記載されています このように http://xml-jp.amznxslt.com/onca/xml?Service=AWSECommerceService&SubscriptionId=1QGE に飛ばさずに自分のドメイン上で 商品の詳細データを記述させるにはどうしたらよいでしょうか? 解説がむずかしかったら 参考ページ、書籍など紹介いただければ 幸いです よろしくお願いします

    • ベストアンサー
    • XML
  • yahoo pipesでamazonから画像を

    yahoo pipesを利用し、amazonから画像をとってこようと考えております。 しかしエラーが出て取得できない状態です。 ※書籍のAmazonIDとpipesのIDを記述すると動きます。 参考書籍はjQueryによるWebサービス活用ワザというものです。 やった事としましては、 ・AmazonのアカウントID取得 ・yahoo pipesの作成 ・htmlファイルの中のphpの部分の書き直し(AmazonIDの部分とpipesのID)です。 エラーが出て、 http://ecs.amazonaws.jp/onca/xml?AWSAccessKeyId=[AmazonAccessID(ここは自分のIDを記述してます)]&Keywords=jQuery&Operation=ItemSearch&ResponseGroup=Medium&SearchIndex=All&Service=AWSECommerceService&Timestamp=&Version=2009- 31&Signature= (400 Bad Request) と書かれています。 作業環境 windows vista homepremium intel core 2duo google chrome4.1 ご教授頂ければ幸いです。宜しくお願い致します。

  • Cache Liteでcasheを作ってくれない

    .htaccessを利用して、awsの商品ページにアクセスして、xmlをキャッシュするようなphpを組んでみました。 たとえば、http://doracken.com/ds/13305831-4.html にアクセスすると、.htaccessでitem.phpにアクセスされ、13305831-4の部分をGETで因数として渡す→ブラウズノードとページを送り、自動的にawsのURLに組み立てるというものです。 --Item.php-- <?php $Browse = $_GET['b'] ; $Bro = $_GET['bro'] ; $pgn = $_GET['Page']; $URL = "http://xml-jp.amznxslt.com/onca/xml?Service=AWSECommerceService&SubscriptionId=1ZVAJQT4R8GWRG0G6502&AssociateTag=auctionzituyo-22&Operation=ItemSearch&SearchIndex=VideoGames&BrowseNode=".$Browse."&ResponseGroup=Offers,ItemAttributes,Similarities,Reviews&ContentType=text/html&Style=http://doracken.com/dsitems.xsl&Version=2006-05-17&ItemPage=".$pgn; require_once 'Cache/Lite.php'; $options = array( 'cacheDir' => './tmp/', "lifeTime" => 3600, ); $Cache_Lite = new Cache_Lite($options); if ($cache = $Cache_Lite->get($URL)) { $content = $cache; }else{ $content = file_get_contents($URL); $Cache_Lite->save($content,$URL); } print $content; ?> しかしなぜか、アクセスしたawsページをキャッシュしてくれないんです。一体どのように書けばいいでしょうか?

    • ベストアンサー
    • PHP
  • PEARのXML/Unserializer.phpが見つからない

    PHP5をインストールしたローカル環境で、落ちていたサンプルコードを改造して使おうとしているのですが、PearのXML/Unserializer.phpが無いと言われます。 PEARのサイトで検索してみても見つかりません。 どこで見つけたらよいのでしょうか? それともPHP5では使えないのでしょうか? ちなみに落ちていたサンプルコードは以下の通りです。 <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>PHPのPEARパッケージであるServices_Amazon</title> <meta name="description" content="Amazonウェブサービスを簡単に扱うことができるPEARのServices_Amazonを使ってみる。" /> </head> <body> <form method="POST" action="<?php $_SERVER['PHP_SELF'] ?>"> 書籍検索: <input type="text" name="keywd" size="30" maxlength="255" value="<?php print($_POST['keywd']); ?>" /> <input type="submit" value="検索" /> </form> <?php // 検索ボックスに入力されたかの判定 if($_POST['keywd'] != '') { $AWSAccessKeyId = "****************"; $Version = "2008-04-07"; $AssociateTag = "working16h-22"; $SearchIndex = "Books"; $ResponseGroup = "Medium"; $Keywords = htmlspecialchars($_POST['keywd']); require_once 'Services/AmazonECS4.php'; $amazon = new Services_AmazonECS4($AWSAccessKeyId,$AssociateTag); $amazon->setLocale('JP'); $option = array( 'Keywords' => $Keywords, 'Sort' => 'salesrank', 'ResponseGroup' => $ResponseGroup, 'Version' => $Version, ); $result = $amazon->ItemSearch($SearchIndex,$option); if(PEAR::isError($result)){ die($result->message); } foreach ($result["Item"] as $key => $value){ $ama1 = $value["DetailPageURL"]; $ama2 = $value["ItemAttributes"]["Title"]; $ama3 = $value["ItemAttributes"]["Author"][0]; print('<p>タイトル:<a href="' . $ama1 . '" target="_blank">' . $ama2 . '</a><br />著者:' . $ama3 . '</p>'); } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • [AWS] 取得したURLにスタイルシートを適用させると、エラーが出る。

    XSLTスタイルシートをstyleを適用させると必ず 終了タグ 'head' が開始タグ 'link' と一致していません。リソース 'http://xml-jp.amznxslt.com/onca/xml?Service=AWSECommerceService&SubscriptionId=0Q... って出てきてしまいます。具体的にXSLTスタイルシートのどこがまずいんでしょうか・・・

    • ベストアンサー
    • XML
  • この表示はどういう意味なのでしょうか?

    おとといまで普通に見れたサイトがこのような表示のまま2日たちました。これはどういう意味なのでしょうか?閉鎖という意味なんでしょうか?ちなみに普通の音楽情報サイトです。 Warning: file_get_contents(http://ecs.amazonaws.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=1VS2CSFJJ1VHW79RB5G2&AssociateTag=x0c-22&Operation=ItemSearch&ResponseGroup=Medium,Offers&SearchIndex=Blended&Keywords=ELLECTGARDEN%25E3%2582%25A2%25E3%2583%25BC%25E3%2583%2586%25E3%2582%25A3%25E3%2582%25B9%3325E3%2583%2588&ItemPage=1): failed to open stream: HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable in /lvm09/vuser03/3/8/0050683/www.@@@@@@@@.jp/main/pcapi.php on line 136 Fatal error: Call to a member function on a non-object in /lvm09/vuser03/3/8/0050683/www.@@@@@@@@.jp/main/pcapi.php on line 142

  • Amazon API で、Seller ID

    Amazon APIで、 SellerIDを設定して、 商品情報を取得したいのですが、 どのようなURLを 記述すればよろしいでしょうか? 現状のURLは、以下のようになっております。 http://ecs.amazonaws.jp/onca/xml?AWSAccessKeyId=XXXXXXXXXXXXX&AssociateTag=hoge-22&MerchantId=A3HKNDJ5XOPL1Y&Operation=SellerListingSearch&ResponseGroup=Request%2CLarge&Service=AWSECommerceService&Timestamp=2015-04-22T20%3A14%3A59Z&Version=2011-08-02&Signature=A9JbbdIPPj%2FzMK2tNydFcx12vJ3u4HCdDEDoD6pC2CY%3D"

  • Amazon Web Service のBrowseNode

    下記リクエストを送ってもブラウズノード 1065852は、OKですが569196ですと エラーになってしまいます。 何処が悪いのでしょうか? http://webservices.amazon.com/onca/xml?Service=AWSECommerceService &AWSAccessKeyId=[Your Access Key ID Here] &Operation=BrowseNodeLookup &BrowseNodeId=1065852 ■参考:ブラウズノード一覧 http://park8.wakwak.com/~da101/nikky/log/2004/09/18_1643.html

    • ベストアンサー
    • XML