在XSL中使用xml查询设置if条件



大家好,我想知道是否有人可以帮助我与XSL的逻辑实现,我有问题。

我正在查询一个xml文件,它返回5个微软产品和2个苹果产品。我要做的是显示所有微软产品,这取决于找到了多少苹果产品。

如果只找到一个苹果产品。然后它应该抓取4个微软产品,但如果找到2个苹果产品,它应该抓取3个微软产品来显示。

my XSL so far

<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>

感谢您的阅读和任何帮助将不胜感激!

您可以将数据存储在变量中,然后在计算中使用它们:

<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>

相关内容

  • 没有找到相关文章

最新更新