3

私は次のcteを持っています:

WITH cte AS
(
        SELECT 
            c.ParentIDNo,  
            c.Category,
            c.ChildCategory,
            c.WSWebProductNameIDNo, 
            c.IDNo, 
            0 AS Level,
            CAST('/' + c.Category AS VARCHAR(1000)) as CteName
        FROM WSWebCategory as c
        WHERE c.ParentIDNo IS NULL

        UNION ALL

        SELECT   
            t.ParentIDNo, 
            t.Category,
            t.ChildCategory, 
            t.WSWebProductNameIDNo,
            t.IDNo, 
            cte.Level + 1 AS Level,
            CAST(cte.CteName + '/' + t.ChildCategory AS VARCHAR(1000)) AS CteName
        FROM WSWebCategory t
        INNER JOIN cte ON t.ParentIDNo = cte.IDNo
    )
    SELECT *, REPLICATE('----', Level) + CteName as CteName FROM cte
    ORDER BY cte.CteName

これは私に次のようなリストを与えます:

    /装置
    ----/装置/オートクレーブ
    --------/装置/オートクレーブ/ALL-AMERICANポータブル滅菌器(WAFCO)
    --------/装置/オートクレーブ/オートクレーブ付属品
    ------------ /装置/オートクレーブ/オートクレーブアクセサリー/Clavies®オートクレーブグローブ(ベルアートサイエンスウェア)
    ------------ /装置/オートクレーブ/オートクレーブ付属品/Grabbit™温度ミット(Heathrow Scientific)
    ------------ /装置/オートクレーブ/オートクレーブ付属品/Odo-Clave®デオドラントパッド(ベルアートサイエンスウェア)
    --------/装置/オートクレーブ/オートクレーブバッグ
    ------------ /装置/オートクレーブ/オートクレーブバッグ/オートクレーブ可能なバイオハザード廃棄バッグ(ベルアートサイエンスウェア)
    ------------ /装置/オートクレーブ/オートクレーブバッグ/オートクレーブ可能なバイオハザード廃棄バッグ(ゴセリン)
    ------------ /装置/オートクレーブ/オートクレーブバッグ/オートクレーブ可能な高温バイオハザード廃棄バッグ(ベルアートサイエンスウェア)
    ------------ /装置/オートクレーブ/オートクレーブバッグ/Chex-All®II滅菌ポーチ(プロッパー)
    ------------ /装置/オートクレーブ/オートクレーブバッグ/Clavies®オートクレーブグローブ(ベルアートサイエンスウェア)
    ------------ /装置/オートクレーブ/オートクレーブバッグ/Clavies®バッグホルダー(ベルアートサイエンスウェア)
    ------------ /装置/オートクレーブ/オートクレーブバッグ/Clavies®汎用オートクレーブ可能バッグ(ベルアートサイエンスウェア)
    ------------ /装置/オートクレーブ/オートクレーブバッグ/Poxygrid®バイオハザードバッグホルダー(ベルアートサイエンスウェア)

しかし、私が求めているのは、ネストされたhtmlリストのセットです。

<ul> 
<li>Apparatus
   <ul> 
    <li>Autoclaves
        <ul>   
            <li>ALL-AMERICAN Portable Sterilizers (WAFCO)</li> 
            <li>Autoclave Accessories
                <ul>
                    <li>Clavies® Autoclave Gloves (Bel-Art Scienceware)</li>
                    <li>Grabbit™ Temp Mitts (Heathrow Scientific)</li>
                    <li>Odo-Clave® Deodorant Pads (Bel-Art Scienceware) </li>
                </ul>
            </li>
            <li>Autoclave Bags
                <ul>
                    <li>Autoclavable Biohazard Disposal Bags (Bel-Art Scienceware)</li>
                    <li>Autoclavable Biohazard Disposal Bags (Gosselin)</li>
                    <li>Autoclavable Hi-Temp Biohazard Disposal Bags (Bel-Art Scienceware)</li>
                    <li>Chex-All® II Sterilization Pouches (Propper)</li>
                    <li>Clavies® Autoclave Gloves (Bel-Art Scienceware)</li>
                    <li>Clavies® Bag Holder (Bel-Art Scienceware)</li>
                    <li>Clavies® General Purpose Autoclavable Bags (Bel-Art Scienceware)</li>
                    <li>Poxygrid® Biohazard Bag Holder (Bel-Art Scienceware)</li>
                </ul>
            </li>
        </ul>
    </li> 
    </ul>
</li>
</ul> 

私はこれを行う方法として困惑しています!

4

2 に答える 2

0

4年後...

擬似コード:

previousLevel = -1;

for each item in items

  if item.level > previousLevel
    print "<ul>"

  if item.level < previousLevel
    print repeat("</ul>", previousLevel - item.level)

  print "<li>" + item.text + "</li>"

  previousLevel = item.level

end for

print repeat("</ul>", previousLevel + 1)

JSP/JSTL:

<c:set var="previousLevel" value="-1"/>

<c:forEach items="${items}" var="item">

    <c:if test="${ item.level > previousLevel }">
        <ul>
    </c:if>

    <c:if test="${ item.level < prevLevel }">
        ${xfn:repeat("</ul>", previousLevel - item.level)}
    </c:if>

    <li>${item.text}</li>

    <c:set var="previousLevel" value="${item.level}"/>

</c:forEach>

<c:if test="${previousLevel > -1}">
    ${xfn:repeat("</ul>",  previousLevel + 1 )}
</c:if>

xfn:repeat文字列繰り​​返し関数の tld 関数はどこにありますか

于 2015-04-21T00:17:55.940 に答える