0

クエリを実行する ASPDOTNETSTOREFRONT の xml パッケージを作成しました。次に、ファイルは製品リンクを作成する UL を作成します。ただし、カテゴリに表示される別の UL と、その中に表示される製品リンクが必要です。

<ul>Category 1</ul>
 <ul>
  <li>product 1</li>
 </ul>
</ul>

上記のようなものですか?

ここに私のxmlパッケージがあります:

<?xml version="1.0" standalone="yes" ?>
<package version="2.1" displayname="Simple Product" debug="true" includeentityhelper="false">

    <!-- ###################################################################################################### -->
    <!-- Copyright AspDotNetStorefront.com, 1995-2011.  All Rights Reserved.                                    -->
    <!-- http://www.aspdotnetstorefront.com                                                                     -->
    <!-- For details on this license please visit  the product homepage at the URL above.                       -->
    <!-- THE ABOVE NOTICE MUST REMAIN INTACT.                                                                   -->
    <!--                                                                                                        -->
    <!-- ###################################################################################################### -->

    <query name="Products" rowElementName="Product">
        <sql>
            <![CDATA[
                WITH Categories (ParentCategoryID, CategoryID, Name, ComputedLevel, Sort) AS
                    (
                    SELECT c.ParentCategoryID, c.CategoryID, c.Name, 0 AS ComputedLevel, CAST('\'+c.Name AS NVARCHAR(255))
                    FROM Category AS c
                    WHERE ParentCategoryID = 0
                    AND Deleted=0
                    AND Published=1
                    UNION ALL
                    SELECT c.ParentCategoryID, c.CategoryID, c.Name, ComputedLevel + 1, CAST(s.Sort + '\'+c.Name AS NVARCHAR(255))
                    FROM Category AS c
                    INNER JOIN Categories AS s ON c.ParentCategoryID = s.CategoryID
                    WHERE Deleted=0
                    AND Published=1
                    )

                    SELECT ParentCategoryID, c.CategoryID, Sort, p.ProductID, p.Name, p.SEName
                    FROM Categories c (NOLOCK)
                    LEFT JOIN ProductCategory pc (NOLOCK) ON pc.CategoryID = c.CategoryID
                    JOIN Product p (NOLOCK) ON p.ProductID = pc.ProductID

                    ORDER BY 3,5
            ]]>
        </sql>

    </query>

    <PackageTransform>
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:aspdnsf="urn:aspdnsf" exclude-result-prefixes="aspdnsf">
            <xsl:output method="html" omit-xml-declaration="yes" />

            <xsl:param name="LocaleSetting" select="/root/Runtime/LocaleSetting" />
            <xsl:param name="WebConfigLocaleSetting" select="/root/Runtime/WebConfigLocaleSetting" />
            <xsl:param name="XmlPackageName" select="/root/System/XmlPackageName" />
            <xsl:param name="SecID">
                <xsl:choose>
                    <xsl:when test="count(/root/QueryString/sectionid) &gt; 0">
                        <xsl:value-of select="/root/QueryString/sectionid" />
                    </xsl:when>
                    <xsl:otherwise>0</xsl:otherwise>
                </xsl:choose>
            </xsl:param>

            <xsl:param name="CategoryID">
                <xsl:choose>
                    <xsl:when test="/root/System/PageName = 'showmanufacturer.aspx' or /root/System/PageName = 'showsection.aspx' or /root/System/PageName = 'showdistributor.aspx' or /root/System/PageName = 'showvector.aspx' or /root/System/PageName = 'showgenre.aspx'">0</xsl:when>
                    <xsl:when test="/root/System/PageName = 'showcategory.aspx' and boolean(/root/QueryString/categoryid)">
                        <xsl:value-of select="/root/QueryString/categoryid"/>
                    </xsl:when>
                    <xsl:when test="(/root/System/PageName = 'showcategory.aspx' or /root/System/PageName = 'showproduct.aspx') and boolean(/root/Cookies/LastViewedEntityInstanceID) and /root/Cookies/LastViewedEntityName = 'Category'">
                        <xsl:value-of select="/root/Cookies/LastViewedEntityInstanceID"/>
                    </xsl:when>
                    <xsl:otherwise>0</xsl:otherwise>
                </xsl:choose>
            </xsl:param>

            <xsl:param name="AncestorID">
                <xsl:for-each select="/root/EntityHelpers/Category//Entity[EntityID = $CategoryID]">
                    <xsl:value-of select="ancestor::*/EntityID"/>
                </xsl:for-each>
            </xsl:param>

            <xsl:param name="ParentID">
                <xsl:for-each select="/root/EntityHelpers/Category//Entity[EntityID = $CategoryID]">
                    <xsl:value-of select="parent::*/EntityID"/>
                </xsl:for-each>
            </xsl:param>

            <xsl:param name="CatID">
                <xsl:choose>
                    <xsl:when test="count(/root/QueryString/categoryid) &gt; 0">
                        <xsl:value-of select="/root/QueryString/categoryid" />
                    </xsl:when>
                    <xsl:otherwise>0</xsl:otherwise>
                </xsl:choose>
            </xsl:param>


            <xsl:template match="/">
                <xsl:element name="ul">
                    <xsl:attribute name="id">
                        <![CDATA[accordion3]]>
                    </xsl:attribute>
                    <xsl:apply-templates select="/root/Products/Product">
                        <xsl:with-param name="prefix" select="''"/>
                    </xsl:apply-templates>
                </xsl:element>
            </xsl:template>



            <xsl:template match="Product">
                <xsl:param name="prefix"></xsl:param>
                <xsl:param name="eName" select="aspdnsf:GetMLValue(Name)" />
                <li >
                    <!--<xsl:value-of select="$prefix" />-->
                    <xsl:if test="number(ParentEntityID) != 0">
                        <!--<span class="catMark">&gt;&gt;</span>&#160;-->




                        <a href="{concat('p-',ProductID,'-',SEName,'.aspx')}">
                            <xsl:if test="EntityID = $CategoryID or descendant::Entity/EntityID = $CategoryID">
                                <xsl:attribute name="style">font-weight:bold</xsl:attribute>
                            </xsl:if>
                            <xsl:value-of select="$eName"/>
                        </a>



                    </xsl:if>
                    <xsl:if test="number(ParentEntityID) = 0">
                        <div class="menuText">
                            <xsl:value-of select="$eName"/>
                        </div>
                    </xsl:if>
                    <xsl:if test="count(child::Entity)&gt;0">
                        <ul >
                            <xsl:apply-templates select="Product">
                                <xsl:with-param name="prefix" select="concat($prefix, '&#160;&#0160;')"/>
                            </xsl:apply-templates>
                        </ul>
                    </xsl:if>
                </li>
            </xsl:template>


        </xsl:stylesheet>
    </PackageTransform>
</package>

UL はここで作成されます。

<xsl:template match="/">
                <xsl:element name="ul">
                    <xsl:attribute name="id">
                        <![CDATA[accordion3]]>
                    </xsl:attribute>
                    <xsl:apply-templates select="/root/Products/Product">
                        <xsl:with-param name="prefix" select="''"/>
                    </xsl:apply-templates>
                </xsl:element>
            </xsl:template>

製品リンクが作成される場所は次のとおりです。

    <xsl:template match="Product">
        <xsl:param name="prefix"></xsl:param>
        <xsl:param name="eName" select="aspdnsf:GetMLValue(Name)" />
        <li >
            <!--<xsl:value-of select="$prefix" />-->
            <xsl:if test="number(ParentEntityID) != 0">
                <!--<span class="catMark">&gt;&gt;</span>&#160;-->

                <a href="{concat('p-',ProductID,'-',SEName,'.aspx')}">
                    <xsl:if test="EntityID = $CategoryID or descendant::Entity/EntityID = $CategoryID">
                        <xsl:attribute name="style">font-weight:bold</xsl:attribute>
                    </xsl:if>
                    <xsl:value-of select="$eName"/>
                </a>


            </xsl:if>
            <xsl:if test="number(ParentEntityID) = 0">
                <div class="menuText">
                    <xsl:value-of select="$eName"/>
                </div>
            </xsl:if>
            <xsl:if test="count(child::Entity)&gt;0">
                <ul >
                    <xsl:apply-templates select="Product">
                        <xsl:with-param name="prefix" select="concat($prefix, '&#160;&#0160;')"/>
                    </xsl:apply-templates>
                </ul>
            </xsl:if>
        </li>
    </xsl:template>

編集:追加された XML 抽出:

<Product>
  <ParentCategoryID>77</ParentCategoryID>
  <CategoryID>78</CategoryID>
  <Sort>\Box Product\Accessories\AA990F</Sort>
  <ProductID>299</ProductID>
  <Name>Air compressor</Name>
  <SEName>air-compressor</SEName>
</Product>
4

1 に答える 1