Если у вас есть поиск в StackOverflow, вы должны найти много вопросов, связанных с разбиением строк.
Вот один, например:
Разбор строки через запятую
В вашем случае, вот как вы бы это использовали
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/DropDownControl">
<select>
<xsl:call-template name="split">
<xsl:with-param name="list" select="@choices"/>
</xsl:call-template>
</select>
</xsl:template>
<xsl:template name="split">
<xsl:param name="list" select="''"/>
<xsl:param name="separator" select="','"/>
<xsl:if test="not($list = '' or $separator = '')">
<xsl:variable name="head" select="substring-before(concat($list, $separator), $separator)"/>
<xsl:variable name="tail" select="substring-after($list, $separator)"/>
<option>
<xsl:value-of select="$head"/>
</option>
<xsl:call-template name="split">
<xsl:with-param name="list" select="$tail"/>
<xsl:with-param name="separator" select="$separator"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Это приводит к следующему XML / HTML
<select>
<option>choice1</option>
<option>choice2</option>
<option>choice3</option>
<option>choice4</option>
</select>
Если бы вы могли использовать XSLT2.0, вы могли бы использовать функцию токенизации. Смотрите эту страницу для примера
Лучший способ разбить и отобразить текст через запятую как HTML
Тем не менее, я заметил, что вы пометили вопрос asp.net и c # 2.0, который предполагает, что вы не сможете использовать XSLT2.0 напрямую.
Другая альтернатива, учитывая, что преобразование выполняется с использованием C #, заключается в том, что вы выполняете разбиение в коде до того, как преобразование выполнено. Напишите некоторый код для чтения XML, доступа к атрибуту, использования функции разделения строк .Net и добавления дочерних элементов к элементу DropDownControl.