2013-02-21 4 views
1

У меня возникла следующая проблема: у меня есть XML-файл, из которого я создаю HTML-файл с использованием XSL. В XSL-файле у меня есть цикл for-each, который создает пару переключателей и, конечно же, мне нужна только одна кнопка, но после того, как я открою файл index.php в папке моего проекта, можно проверить ВСЕ радиокнопки , Как я могу добиться, чтобы после цикла можно было выбрать только одну радиокнопку? Заранее спасибо!Для каждого цикла через переключатели в XSL

Здесь фрагмент кода внутри цикла:

<div data-role="fieldcontain"> 
    <fieldset data-role="controlgroup"> 
     <input type="radio" name="radio-choice" id="radio-choice-3" /> 
     <label for="radio-choice-3"><xsl:value-of select="text"/></label> 
    </fieldset> 
</div> 

P.S. Я полагаю, что это идентификатор, который не изменяется, и каждый раз, когда цикл проходит через код, создается независимый переключатель, и, очевидно, атрибут controlgroup не группирует кнопки.

+0

В качестве побочного примечания использование 'for-each', как правило, является плохой идеей в XSLT. Как вы можете видеть в ответе Димитрия, вы можете хорошо сочетать «шаблон-матч» с общим шаблоном. XSLT был разработан как [декларативный язык] (http://en.wikipedia.org/wiki/Declarative_programming). –

ответ

1

Это преобразование:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="x"> 
    <div data-role="fieldcontain"> 
     <fieldset data-role="controlgroup"> 
      <input type="radio" name="radio-choice" id="radio-choice-{position()}" /> 
      <label for="radio-choice-{position()}"><xsl:value-of select="text"/></label> 
     </fieldset> 
    </div> 
</xsl:template> 
</xsl:stylesheet> 

при нанесении на следующий документ XML (ни один не был обеспечен !!!):

<t> 
<x> 
    <text>Choice one</text> 
</x> 
<x> 
    <text>Choice two</text> 
</x> 
<x> 
    <text>Choice three</text> 
</x> 
</t> 

производит желаемый, правильный результат:

<div data-role="fieldcontain"> 
    <fieldset data-role="controlgroup"> 
     <input type="radio" name="radio-choice" id="radio-choice-1"/> 
     <label for="radio-choice-1">Choice one</label> 
    </fieldset> 
</div> 
<div data-role="fieldcontain"> 
    <fieldset data-role="controlgroup"> 
     <input type="radio" name="radio-choice" id="radio-choice-2"/> 
     <label for="radio-choice-2">Choice two</label> 
    </fieldset> 
</div> 
<div data-role="fieldcontain"> 
    <fieldset data-role="controlgroup"> 
     <input type="radio" name="radio-choice" id="radio-choice-3"/> 
     <label for="radio-choice-3">Choice three</label> 
    </fieldset> 
</div> 

и если отображается в браузере, в любой момент может находиться только один переключатель.

+0

Спасибо, Димитр! Ваше решение очень помогло мне! Большое спасибо! –

+0

@busuzima, добро пожаловать. –

0

Для того, чтобы проверить только одну радиокнопку, все элементы <input type="radio"/> должны иметь одинаковый атрибут @name. Например:

<input type="radio" name="radio-choice" id="radio-choice-3"/> 
<input type="radio" name="radio-choice" id="radio-choice-4"/> 
Смежные вопросы