0

Amazon が xslt サポートを停止したので、php5 の xsl を使用して自分のサーバーに移動したいと考えました。JS が Web ページ用に処理するには、出力をテキスト形式にする必要があります。私の問題は、Amazon の xml 応答 (非常に省略されています) が次のようになっていることです。

    <?xml version="1.0" ?>
    <ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
       /............./
    </ItemLookupResponse>

私の問題は、xmlns="http://..." を削除する限り、xsl スタイルシートが正常に機能することです。それをバイパスするか、単に無視するには、xsl スタイルで何が必要ですか? 必要なすべてのノードは、外側のノードの内側にあります。

xslt は次のとおりです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="CallBack" select="'amzJSONCallback'"/>
<xsl:output method="text"/>

 <xsl:template match="/">
  <xsl:value-of select="$CallBack"/>
  <xsl:text>( { "Item" : </xsl:text><xsl:apply-templates/><xsl:text> } ) </xsl:text>
 </xsl:template>

 <xsl:template match="OperationRequest"></xsl:template>
 <xsl:template match="Request"></xsl:template>

 <xsl:template match="Items">
   <xsl:apply-templates select="Item"/>
  </xsl:template>

 <xsl:template match="Item">
  <xsl:text> {</xsl:text>
  <xsl:text>"title":"</xsl:text><xsl:apply-templates select="ItemAttributes/Title"/><xsl:text>",</xsl:text>
  <xsl:text>"author":"</xsl:text><xsl:apply-templates select="ItemAttributes/Author"/><xsl:text>",</xsl:text>
  <xsl:text>"pubbdate":"</xsl:text><xsl:apply-templates select="ItemAttributes/PublicationDate"/><xsl:text>"</xsl:text>
  <xsl:text>} </xsl:text>
 </xsl:template>
</xsl:stylesheet>
4

2 に答える 2

0

おそらく、XML 名前空間がどのように機能するかを学ぶ必要があります。簡単に言えば、次のように XSL ファイルで名前空間プレフィックスを定義する必要があります。

<xsl:stylesheet ... xmlns:awse="http://webservices.amazon.com/AWSECommerceService/2011-08-01">

次に、修飾名を使用して、その名前空間の下の要素を照合して選択する必要があります。

<xsl:template match="awse:ItemLookupResponse">

(XSLT 2.0 では、デフォルトの名前空間を定義できます。ただし、PHP を使用しているため、おそらく XSLT 1.0 に限定されます。)

于 2013-09-01T22:53:42.067 に答える
0

nwellnhof が正しいようです。テストで間違った名前空間を使用していました。私がしたことは、追加することだけでした:

<xsl:stylesheet ... xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2011-08-01">

次に、要素は次のようになります

<xsl:template match="aws:ItemLookupResponse">

これで、変換は完全に機能します。最初に試したときになぜうまくいかなかったのかわかりません。

于 2013-09-08T15:50:52.470 に答える