2014-04-03 62 views
1

我有一個網頁,我沒有寫,但必須修改(使用asp dot網店前臺產品,如果你不熟悉它不會真的很重要),使用XLST 。它從SQL查詢中獲取數據。我有以下情況:使用XSLT和SQL的嵌套循環

我有適合汽車的產品。我們有通過make列出汽車模型的頁面,每個make都有一年(儘管這裏沒有使用它)。該頁面的目的是列出所選製造商的每個型號。現在我們決定添加模型的分組,因此每個模型都有一個make和一個model_group。只涉及兩個表格,一個表示製造商,型號,年份(本例中未顯示在頁面上)和model_group ID。 model_grouping表僅包含model_group名稱和id。

的SQL看起來像這樣的@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> 

+0

您是否有XSLT應用於實際XML的示例?謝謝! –

回答