2012-05-30 3 views
0

У меня есть корзина электронной торговли, которая генерирует XML во время выполнения. У меня есть доступ к стилю XSL, который стилирует фактический XML.база данных запросов через файл xsl

Я хотел бы отобразить изображения категорий продуктов в меню. Есть ли пример запуска запроса в файле xsl, который вы могли бы мне показать?

Я не могу видеть, где его тянет данные категории от?

Вы можете помочь?

<?xml version="1.0" standalone="yes" ?> 
    <!-- ###################################################################################################### --> 
    <!-- Copyright AspDotNetStorefront.com, 1995-2009. 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. --> 
    <!-- ###################################################################################################### --> 
    <package version="2.1" displayname="Categories" debug="false" includeentityhelper="true"> 
    <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="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:template match="/"> 
    <xsl:element name="ul"> 
    <xsl:attribute name="class"> 
    <![CDATA[menuul]]> 
    </xsl:attribute> 

    <xsl:apply-templates select="/root/EntityHelpers/Category/Entity"> 
    <xsl:with-param name="prefix" select="''"/> 
    </xsl:apply-templates> 

    </xsl:element> 
    </xsl:template> 

    <xsl:template match="Entity"> 
    <xsl:param name="prefix"></xsl:param> 
    <xsl:param name="eName" select="aspdnsf:GetMLValue(Name)" /> 

    <xsl:choose> 
    <xsl:when test="Published=1"> 

    <li class="menuli"> 
    <xsl:value-of select="$prefix" /> 
    <!--<xsl:if test="number(ParentEntityID) != 0"> 
    <span class="catMark">>></span>� 
    </xsl:if>--> 
    <a href="{concat('c-',EntityID,'-',SEName,'.aspx')}"> 
    <xsl:if test="EntityID = $CategoryID or descendant::Entity/EntityID = $CategoryID"> 
    <xsl:attribute name="class">MenuSelected</xsl:attribute> 
    </xsl:if> 
    <xsl:value-of select="$eName" disable-output-escaping="yes"/> 
    </a> 


    <xsl:if test="count(child::Entity)>0"> 
    <ul class="submenuul"> 
    <xsl:apply-templates select="Entity"> 
    <xsl:with-param name="prefix" select="concat($prefix, '��')"/> 
    </xsl:apply-templates> 
    </ul> 
    </xsl:if> 
    </li> 

    </xsl:when> 
    </xsl:choose> 

    </xsl:template> 

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

ответ

1

Если вы используете ASP.NET, вы можете использовать стандартный ASP.NET XML Control.

При загрузке страницы присвоить ему свои XML и XSL файлы, как показано ниже:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Xml1.DocumentSource = "~/App_Data/YourXmlFile.xml"; 
    Xml1.TransformSource = "~/App_Data/YourXslStyleSheetFile.xsl"; 
} 

Вы также можете использовать DocumentContent свойство вашего XML хранятся не в файлах, но, то есть в базе данных.

См example here

+0

Я использую файл скина шаблона. Я не могу найти datafeed для xml-файла в качестве его создания во время выполнения. –

+1

@ sp-1986 извините, я не понимаю вашего комментария ... Я обновил свой ответ ссылкой, например, в которой есть как xml, так и xsl-тексты – Cheburek

0

Принятый ответ верен ASP.Net, но не к Aspdotnetstorefront. XML-файл, указанный в вопросе, генерируется только в том случае, если debug включен и не должен генерироваться в каких-либо производственных средах (в итоге вы столкнулись с конфликтами записи).

XML за XSLT создается для вас во время выполнения. Данные категории (и другие данные сущности) включены, поскольку у вас есть includeentityhelper="true". EntityHelper кэширует данные категории (и других объектов) для уменьшения запросов БД. Если вам нужны данные в дополнение к этому, вы должны использовать узел XMLPackage <query> документированной здесь (в разделе «SQL запросов»): http://manual.aspdotnetstorefront.com/p-157-xml-packages.aspx

Вы также найти «узел», используемый в большинстве XMLPackages, включенных в по умолчанию.

Смежные вопросы