2014-05-23 61 views
1

您好傢伙想知道是否有人可以幫我用XSL的邏輯實現我有問題。在XSL中使用xml查詢設置if條件

我在查詢返回5個Microsoft產品和2個Apple產品的xml文件。我想要做的是顯示所有的微軟產品,取決於如何找到多少蘋果產品。

所以,如果只有一個蘋果產品被發現。那麼它應該抓住4個微軟產品,但如果發現2個蘋果產品,它應該抓住3個微軟產品來顯示。

我的XSL到目前爲止

<xsl:call-template name="WRITEPRODUCTSET"> 
<xsl:with-param name="PRODUCTS" select="/Result/records[ @name = 'microsoft' ]" /> 
</xsl:call-template> 
<xsl:call-template name="WRITEPRODUCTSET"> 
<xsl:with-param name="PRODUCTS" select="/Result/records[ @name != 'apple' ]" /> 
</xsl:call-template> 

謝謝您的閱讀和任何幫助將不勝感激!

回答

1

您可以將您的數據變量,然後在計算中使用它們:

<xsl:variable name="apple-products"  select="//records[@name='apple']"/> 
<xsl:variable name="microsoft-products" select="//records[@name='microsoft']"/> 

例如:

<xsl:variable name="ms-products-to-return" 
     select="count($microsoft-products) - count($apple-products)"/> 

然後你就可以限制設定與謂詞來決定哪個這些產品的應該返回。例如,此樣式表將按文檔順序返回它們:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

    <xsl:variable name="apple-products"  select="//records[@name='apple']"/> 
    <xsl:variable name="microsoft-products" select="//records[@name='microsoft']"/> 

    <xsl:template match="Result"> 
     <xsl:variable name="ms-products-to-return" 
      select="count($microsoft-products) - count($apple-products)"/> 
     <xsl:apply-templates 
      select="$microsoft-products[position() &lt;= $ms-products-to-return]" /> 
    </xsl:template> 

    <xsl:template match="records"> 
     <xsl:copy-of select="."/> 
    </xsl:template> 

</xsl:stylesheet>