我有一个网页,不是我写的,但必须修改(使用 asp dot net store front product,如果您不熟悉,这并不重要),它使用 XLST。它从 SQL 查询中获取数据。我有以下情况:
我有适合汽车的产品。我们有按品牌列出汽车型号的页面,每个品牌都有一年(尽管这里没有使用)。该页面旨在列出所选品牌的每个模型。现在我们决定添加模型分组,所以每个模型都有一个品牌和一个模型组。只涉及两个表,一个保存品牌、型号、年份(在这种情况下不显示在页面上)和模型组 ID。model_grouping 表仅包含 model_group 名称和 id。
SQL 看起来像这样,@make 是当前选择的 make:
SELECT DISTINCT CMMY.Make,mg.model_group, CMMY.Model
FROM Car_MakeModelYear CMMY WITH (NOLOCK) LEFT JOIN model_grouping mg ON
CMMY.model_grouping_id = mg.model_grouping_id
WHERE Make = @make
Order By Make, Model
XSLT 如下所示。我最终做的是粗略的黑客攻击,我比较了模型名称的前七个字符,如果它们发生了变化,我会显示下一个 model_group。但我真正想要的是遍历 model_group1 的每个模型,然后移动到 model_group2 等等,嵌套循环。
无论我如何尝试,内部循环永远不会执行,或者无论子组如何,它都会打印出所有模型。
从 XML 文件中读取数据时,我已经看到了这样的示例,但它们似乎都不适合这种情况。我是否需要以某种方式重新编写 SQL 以使其工作?
<xsl:for-each select="/root /Auto/MMY[translate(Make,$lcletters,$ucletters)=$CurrentMake and not(Model=preceding::Model)]">
<div class="listModels">
<xsl:if test="substring(Model,1,7) != substring(preceding::Model[1],1,7)">
<h2><br/><xsl:value-of select="model_group" /><br/></h2>
</xsl:if>
<h3>
<a>
<xsl:attribute name="href">
<xsl:value-of select="translate(customSiteFunction:StrToUpper...(this is text formamting for url).aspx
</xsl:attribute>
<xsl:value-of select="Model" />
</a>
</h3>
</div>