1

現在、Magentoで生成されたXMLファイルを並べ替えています。次のようになります。

<products>
  <product>
    <productnaam>Example item 1</productnaam>
    <populariteit>27845</populariteit>
    <imagelink>http://www.example.com/image1.jpg</imagelink>
  </product>
  <product>
    <productnaam>Example item 2</productnaam>
    <populariteit>12687</populariteit>
    <imagelink>http://www.example.com/image1.jpg</imagelink>
  </product>
  <product>
    <productnaam>Example item 3</productnaam>
    <populariteit>32574</populariteit>
    <imagelink>http://www.example.com/media/catalog/productno_selection</imagelink>
  </product>
<products>

XSLの次のブロックを使用します。

<xsl:template match="/">
  <xsl:apply-templates select="/products/product">
    <xsl:sort select="populariteit" order="ascending" data-type="number"/>  
  </xsl:apply-templates>
</xsl:template>

アイテムを人気(XMLでは "populariteit")で並べ替え、次のコードブロックを使用して、リストから最初のアイテムを取り出し、最も人気のあるアイテムを表示します。

<xsl:template match="product">
  <xsl:if test="position()=1">
    <xsl:value-of select="productnaam"/>
    <img>
      <xsl:attribute name="src">
        <xsl:value-of select='imagelink'/>
      </xsl:attribute>
    </img>
  </xsl:if>
</xsl:template>

ただし、問題は、有効な画像がない場合があることです。その場合、<imagelink>-attributeは常に次のようになります。

<imagelink>http://www.example.com/media/catalog/productno_selection</imagelink>

私が欲しいのは、今のようにリストをソートすることですが、<imagelink>上に示したものと等しいすべての項目をスキップする必要があります。

私は次のようなことを試しました:

<xsl:sort select="populariteit" order="ascending" data-type="number" test="not(imagelink = 'http://www.fietspunt.nl/media/catalog/productno_selection')">

しかし、それはうまくいかないようです。

上記の例では、「例項目3」が最も人気がありますが、属性に誤りがある<imagelink>ため、「例項目1」を表示する必要があります。

ソートコードのブロックを機能させるには、どのような変更を加える必要がありますか?

4

1 に答える 1

2

使用する:

  <xsl:apply-templates select=
    "/products/product
      [not(imagelink 
          = 
          'http://www.fietspunt.nl/media/catalog/productno_selection'
           )
      ]">
    <xsl:sort select="populariteit" order="ascending" data-type="number"/>  
  </xsl:apply-templates>
于 2012-11-19T16:06:19.167 に答える