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>属性总是

<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')">

但这似乎不起作用。

在上面的例子中,'Example item 3' 是最受欢迎的,但是,由于它有一个错误的<imagelink>- 属性,'Example item 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 回答