大家好,我想知道是否有人可以帮助我与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() <= $ms-products-to-return]" />
</xsl:template>
<xsl:template match="records">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>