Как назначить значения атрибутов XML раскрывающемуся списку с помощью XSL - PullRequest
0 голосов
/ 01 июня 2010

У меня есть образец XML как;

<?xml version="1.0" encoding="iso-8859-9"?>
    <DropDownControl id="dd1" name="ShowValues" choices="choice1,choice2,choice3,choice4">
</DropDownControl >


Мне нужно создать представление пользовательского интерфейса этого XML с использованием XSL.Я хочу заполнить выпадающий список значениями, указанными в атрибуте choices.
У кого-нибудь есть идеи по этому поводу?
Заранее спасибо:)

1 Ответ

0 голосов
/ 01 июня 2010

Если у вас есть поиск в 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.

...