1

我有一个网页,不是我写的,但必须修改(使用 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>

4

1 回答 1

0

我相信您想使用XSL:Key(在 Make 上)和 Muenchian 方法来遍历您的密钥。

以下是 Muenchian 方法的概述:http: //www.jenitennison.com/xslt/grouping/muenchian.html

这是一个更实际的用例: XSLT grouping on multiple keys using Muenchian method

如果您提供应用 XSLT 的 XML,我可以帮助您提供更具体的代码示例。

于 2014-10-28T02:15:52.937 回答