XSL排序,但仅在某个属性为false时

时间:2012-11-19 15:57:55

标签: xml xslt sorting

我正在排序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')">

但这似乎不起作用。

在上面的示例中,“示例项目3”是最受欢迎的,但由于它具有错误的<imagelink> - 属性,因此“示例项目1”是需要显示的项目。

我需要对我的排序代码块进行哪些更改才能使其正常工作?

1 个答案:

答案 0 :(得分: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>