2013-03-01 4 views
0

xslt1.0 предпочтительноНумерация DropDown Параметры XSLT

У меня есть следующий код XSLT, который воссозданный на сумму productguarantee выбранной. Так сказать, я выбираю 5, я получаю снизу вниз 5 раз. В тот момент, когда выбрано что-либо более 1, он будет последовательно указывать каждый из них.

То, что я хочу, это только число элементов, которые являются одинаковыми, например. если B выбрано 3 раза, это будет B 1, B 2, B 3.

И в сложной части есть «другая» коробка, где пользователь может набирать freetext, так что если это соответствует другому другому, тогда они будут но я не слишком беспокоюсь об этой части на данный момент.

В настоящее время говорят, что вы выберите 5 продуктов, которые вы получите:

OptionOne 1, OptionOne 2, OptionTwo 3, OptionFour 4, OptionFive 5

То, что я хотел бы это вы получите нумерацию только кратные, например,

OptionOne 1, первый вариант 2, OptionTwo, OptionFour, OptionFive

Любая помощь высоко оценили

Код:

<xsl:if test="productguarantee!=0"> 
<xsl:for-each select="productguarantees/productguaranteedata"> 
    <xsl:if test="producttypes/option[@id='A']='selected'">OptionOne</xsl:if> 
    <xsl:if test="producttypes/option[@id='B']='selected'">OptionTwo</xsl:if> 
    <xsl:if test="producttypes/option[@id='C']='selected'">OptionThree</xsl:if> 
    <xsl:if test="producttypes/option[@id='D']='selected'">OptionFour</xsl:if> 
    <xsl:if test="producttypes/option[@id='E']='selected'">OptionFive</xsl:if> 
    <xsl:if test="producttypes/option[@id='F']='selected'">OptionSix</xsl:if> 
    <xsl:if test="producttypes/option[@id='G']='selected'">OptionSeven</xsl:if> 
    <xsl:if test="producttypes/option[@id='H']='selected'"><xsl:value-of select="otherprodtypebox"/></xsl:if> 
    <xsl:if test="(../../productguarantee)!='1'"> 
    <xsl:value-of select="position()"/> 
    </xsl:if> 
    </xsl:for-each> 
</xsl:if> 

XML:

<productguarantee>0</productguarantee> 
    <productguarantees> 
     <productguaranteedata id="0"> 
      <producttypes> 
       <option id="A">selected</option> 
       <option id="B"/> 
       <option id="C"/> 
       <option id="D"/> 
       <option id="E"/> 
       <option id="F"/> 
       <option id="G"/> 
       <option id="H"/> 
      </producttypes> 
      <otherprodtypebox/> 
     </productguaranteedata> 
</productguarantees> 
+1

первый, пожалуйста, предоставить образец XML, а также связанный с ним ожидаемый результат. (лучше всего, если выход с багги здесь тоже) – BiAiB

+0

@BiAiB теперь добавлен. Надеюсь, это имеет смысл. – topcat3

+0

Возможно, что-то вроде этого может работать topcat3

ответ

1

Следующая не самое изящное решение, но время ограничено, и я обнаружил, что изменение вашего индиви двойной XSL: если заявления на что-то вдоль линий:

<xsl:if test="producttypes/option[@id='A']='selected'"> 
    <xsl:text>OptionOne</xsl:text> 
    <xsl:if test=" 
     preceding-sibling::productguaranteedata[producttypes/option[@id='A']='selected'] 
     or 
     following-sibling::productguaranteedata[producttypes/option[@id='A']='selected']      
    "> 
     <xsl:value-of select="position()"/> 
    </xsl:if> 
</xsl:if> 

(например, для продукта А, вы должны изменить другие XSL: если заявления соответственно)

и пропуском XSL: если на конец цикла может помочь.

EDIT:

<xsl:if test="producttypes/option[@id='A']='selected'"> 
    <xsl:text>OptionOne</xsl:text> 
    <xsl:if test=" 
     preceding-sibling::productguaranteedata[producttypes/option[@id='A']='selected'] 
     or 
     following-sibling::productguaranteedata[producttypes/option[@id='A']='selected']      
    "> 
     <xsl:value-of select="count(preceding-sibling::productguaranteedata[producttypes/option[@id='A']='selected'])+1"/> 
    </xsl:if> 
</xsl:if> 
+0

спасибо. был уезжен на выходные, поэтому попробуем это сегодня. – topcat3

+0

похоже, что почти работает так, как я хочу, но я хочу, чтобы счетчик начинал с 1 для новых продуктов, например. с этим кодом я получаю A 1, A 2, B 3, B 4, C, но в идеале я бы хотел A 1, A 2, B 1, B 2, C. Я надеюсь, что в этом есть смысл. Спасибо за всю помощь – topcat3

+0

@topcat, это довольно легко изменить - см. Мой отредактированный ответ. – marty