gpt4 book ai didi

xslt - 在 XSLT 中按选择框排序

转载 作者:行者123 更新时间:2023-12-04 06:42:49 24 4
gpt4 key购买 nike

我在我目前正在构建的网站上有这个选择框,我想要做的是根据正在选择的值对页面上显示的项目列表进行排序。
问题是我得到了不同种类的数据类型,例如位置和价格。
如果我想按位置排序,没问题,它可以按位置名称的字母顺序完美排序。但是,如果我按照“低预算”(价格从低到高)进行排序,则必须在排序中添加其他标签(数据类型 =“数字”)。这工作正常,但随后位置等不再工作。

如何解决这个问题以使其处理各种不同的数据类型?

我的 XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">

<xsl:param name="url-filter" select="'recommended'" />

<xsl:template name="resort-list" match="data/resorts/entry">
<form name="sort-form" action="{$root}/resorts/" method="get">
<select name="filter" onChange="document.getElementById('sort-form').submit();">
<option value="">Sort By...</option>
<option value="recommended">Recommended</option>
<option value="location">Location</option>
<option value="prices-from">Low budget</option>
<option value="prices-till">High budget</option>
</select>
</form>

<xsl:for-each select="data/resorts/entry">
<!-- this is were I sort the items -->
<xsl:sort select="*[name() = $url-filter]" />
<a href="{$root}/koh-lipe-resorts/resort-view/{resort-name/@handle}">
<h3 class="resort-item-heading grey"><xsl:value-of select="resort-name"/></h3>
<p>
<xsl:call-template name="truncate">
<xsl:with-param name="value" select="resort-description" />
<xsl:with-param name="length" select="150" />
</xsl:call-template>
</p>
</a>
</xsl:for-each>
</xsl:template>

<xsl:include href="../utilities/master.xsl"/>
</xsl:stylesheet>

我的 XML:
<data>
<events />
<resorts>
<pagination total-entries="11" total-pages="2"
entries-per-page="10" current-page="1" />
<section id="9" handle="resorts">Resorts</section>
<entry id="114">
<price-from handle="1200">1200</price-from>
<price-till handle="1900">1900</price-till>
<recommended>No</recommended>
<lipe-green-aware-resort>No</lipe-green-aware-resort>
<name>Baja Resort</name>
<location>Sunrise Beach</location>
</entry>
</resorts>
</data>

最佳答案

此转换为每个可能的参数值正确排序 :"recommended""price-from" :

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:param name="url-filter" select="'price-from'" />

<xsl:variable name="vSortOrder">
<xsl:choose>
<xsl:when test="$url-filter = 'price-from'">
<xsl:text>ascending</xsl:text>
</xsl:when>
<xsl:otherwise>descending</xsl:otherwise>
</xsl:choose>
</xsl:variable>

<xsl:variable name="vSortType">
<xsl:choose>
<xsl:when test="$url-filter = 'price-from'">
<xsl:text>number</xsl:text>
</xsl:when>
<xsl:otherwise>text</xsl:otherwise>
</xsl:choose>
</xsl:variable>

<xsl:template name="resort-list" match="data/resorts">
<form name="sort-form" action="/*/resorts/" method="get">
<select name="filter" onChange="document.getElementById('sort-form').submit();">
<option value="">Sort By...</option>
<option value="recommended">Recommended</option>
<option value="location">Location</option>
<option value="prices-from">Low budget</option>
<option value="prices-till">High budget</option>
</select>
</form>

<xsl:for-each select="entry">
<!-- this is were I sort the items -->
<xsl:sort select="*[name() = $url-filter]"
data-type="{$vSortType}" order="{$vSortOrder}" />
<a href="/*/koh-lipe-resorts/resort-view/{resort-name/@handle}">
<h3 class="resort-item-heading grey"><xsl:value-of select="name"/></h3>
</a>
</xsl:for-each>
</xsl:template>

<xsl:template match="/">
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
</xsl:stylesheet>

有了这个 XML 文档 (仅提供一个条目来扩展所提供的):
<data>
<events />
<resorts>
<pagination total-entries="11" total-pages="2"
entries-per-page="10" current-page="1" />
<section id="9" handle="resorts">Resorts</section>
<entry id="114">
<price-from handle="1200">1400</price-from>
<price-till handle="1900">1900</price-till>
<recommended>No</recommended>
<lipe-green-aware-resort>No</lipe-green-aware-resort>
<name>Baja Resort</name>
<location>Sunrise Beach</location>
</entry>
<entry id="115">
<price-from handle="1500">1500</price-from>
<price-till handle="1700">1700</price-till>
<recommended>Yes</recommended>
<lipe-green-aware-resort>No</lipe-green-aware-resort>
<name>Blah-Blah Resort</name>
<location>Blah-Blah Beach</location>
</entry>
</resorts>
</data>

以及 $url-filter 的两个可能值中的每一个参数,产生正确的结果排序使用正确的排序键数据类型和正确的排序顺序(升序或降序)。

关于xslt - 在 XSLT 中按选择框排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4039855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com