Я работаю над старым веб-сайтом электронной коммерции, на котором установлена действительно старая версия ASPDotNetStoreFront с полным отказом от ответственности. Я не очень разбираюсь в XML / XSL. Мне просто нужно погрузиться и попытаться заставить работать код, глядя на другие код.
По существу, некоторые продукты ограничены в том количестве, в котором они могут быть проданы. Страница продукта получает это в виде строки, разделенной запятой. Например,
"5,10,15,20"
Я настроил параметр ниже для сбора этих данных, который работает правильно
<xsl:param name="restrictedquantities">
<xsl:value-of select="/root/Products2/Product/RestrictedQuantities" />
</xsl:param>
После этого мне нужно вывести количества в виде отдельных опций в теге select, например ниже
<select>
<option value="5">5</option>
<option value="10">10</option>
<option value="15">15</option>
<option value="20">20</option>
</select>
Мне удалось на 98% работать с приведенным ниже кодом, большую часть кода я нашел в других вопросах о переполнении стека и пытался соединить его вместе,
<xsl:when test="$restrictedquantities != ''">
<select>
<xsl:call-template name="split">
<xsl:with-param name="s" select="$restrictedquantities" />
</xsl:call-template>
</select>
</xsl:when>
Затем за пределами моего шаблона ниже я создал еще один шаблон, который разделяет строку через запятые, и по мере вывода я помещаю теги вокруг значений.
<xsl:template name="split" xmlns="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="s" />
<xsl:param name="withcomma" select="false()" />
<xsl:choose>
<xsl:when test="contains($s, ',')">
<!-- if there is still a comma, call me again
with everything after the first comma... -->
<xsl:call-template name="split">
<xsl:with-param name="s" select="substring-after($s, ',')" />
<xsl:with-param name="withcomma" select="true()" />
</xsl:call-template>
<!-- ...and print afterwards the current part -->
<option value="<xsl:value-of select="substring-before($s, ',')" />"><xsl:value-of select="substring-before($s, ',')" /></option>
</xsl:when>
<xsl:otherwise>
<!-- No comma left in the remaining part: print the rest -->
<option value="<xsl:value-of select="$s" />"><xsl:value-of select="$s" /></option>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Это приводит к выводу ниже, где он выводит двойные кавычки вокруг вывода моих шаблонов, делая его неработающим.
Вывод на консоль моего тега выбора
Я думаю, что мне нужно как-то избежать моего кода, но я не уверен. Я чувствую, что заставляю XSL делать то, чего не предполагалось.
Любая помощь или альтернативы были бы фантастическими
Спасибо