0

Webサイトで上位のiPhoneアプリを表示するには、AppleRSSフィードをフォーマットする必要があります。XMLファイルをダウンロードして、スタイルシートを適用するのは簡単だと思いましたが、それは大変な作業になります...適用しようとしているXSLiamは次のとおりです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:im="http://itunes.apple.com/rss">

<xsl:template match="/">


<tr>
  <th>ID</th>
  <th>Title</th>
</tr>
<xsl:for-each select="entry">
<tr>
  <td><xsl:value-of select="id"/></td>
  <td><xsl:value-of select="title"/></td>
  <td><xsl:value-of select="category"/></td>

</tr>
</xsl:for-each>

</xsl:template>

</xsl:stylesheet>

フォーマットしようとしているXMLフィードはhttp://itunes.apple.com/rss/generator/からダウンロードできます(iOSアプリを選択して[生成]をクリックします)。

これについて助けてください..XMLファイルはXSLファイルに加えた変更を変更せず、常にXMLファイルの内容全体を表示します。

私はインターネット上でこれに関するトピックを1つだけ見つけることができました、そしてそれはまた実用的な解決策を持っていません。最近人々がi-tunesアプリでウェブサイトを見せているなら、それはかなりなじみのある問題であるはずです。

4

1 に答える 1

2

あなたが抱えている問題は名前空間にあると思います。XSLTでそれらを適切に考慮していません。サンプルフィードを見ると、ルート要素は次のとおりです。

<feed xmlns:im="http://itunes.apple.com/rss" xmlns="http://www.w3.org/2005/Atom" xml:lang="en">

これは、特に指定がない限り、すべての要素がURI「http://www.w3.org/2005/Atom」を持つ名前空間の一部であることを意味します。XSLTでこれを宣言しましたが、実際には使用しておらず、XSLTコードは名前空間の一部ではない要素と一致させようとしています。

XSLTがフィード要素も考慮していないという問題もあります。あなたがする必要があるのは、の最初のテンプレートの一致を<xsl:template match="/">次のものに置き換えることです

<xsl:template match="/atom:feed">

xsl:for-eachは次のようになります

<xsl:for-each select="atom:entry"> 

完全なXSLTは次のとおりです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:im="http://itunes.apple.com/rss">
   <xsl:output method="html" indent="yes"/>

   <xsl:template match="/atom:feed">
      <tr>
         <th>ID</th>
         <th>Title</th>
      </tr>

      <xsl:for-each select="atom:entry">
         <tr>
            <td>
               <xsl:value-of select="atom:id"/>
            </td>
            <td>
               <xsl:value-of select="atom:title"/>
            </td>
            <td>
               <xsl:value-of select="atom:category/@label"/>
            </td>
         </tr>
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

これにより、いくつかの結果が出力されるはずです。

多くの場合、 xsl:for-eachではなく、テンプレートマッチングを使用して、テンプレートの再利用を促進し、インデントの少ないコードを整理する方がよいことに注意してください。これも機能します

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:im="http://itunes.apple.com/rss">
   <xsl:output method="html" indent="yes"/>
   <xsl:template match="/atom:feed">
      <tr>
         <th>ID</th>
         <th>Title</th>
      </tr>
      <xsl:apply-templates select="atom:entry"/>
   </xsl:template>

   <xsl:template match="atom:entry">
      <tr>
         <td>
            <xsl:value-of select="atom:id"/>
         </td>
         <td>
            <xsl:value-of select="atom:title"/>
         </td>
         <td>
            <xsl:value-of select="atom:category/@label"/>
         </td>
      </tr>
   </xsl:template>
</xsl:stylesheet>
于 2012-06-04T09:03:23.143 に答える