- ベストアンサー
amazonECS4.0でxmlをhtmlに変換できません
- amazonECS4.0を利用してRESTリクエスト通信により返ってきたXMLをXSLTによりHTMLに変換したいのですが、うまく行きません
- xmlにて戻ってきたタイトル情報のみを表示させようとしている、xslをアップロードしているのですが、うまくいきません
- このXMLに対してタイトル情報と画像情報のみを抜き出して表示出来るようなXSLソースを求めています
- みんなの回答 (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)
- himajin100000
- ベストアンサー率54% (1660/3060)
==============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; }
補足
ご回答ありがとうございました。 http://spunkyweb.net/amazon/index_test.html の3というリンクで上記のxslを利用しているのですが、 http://spunkyweb.net/amazon/amazon_2.xsl と同じくタイトル以外もダッーと表示されてしまいます。。。 どこかおかしな点がありますでしょうか? まずは特定の情報のみを抜き出して表示する方法を知りたいのです。 よろしくお願いします。