2014-01-16 3 views
0

Я новичок в XSLT, и мне нужно, чтобы преобразовать крест помещенных тег как:XSLT преобразование креста размещенных тегов

<tabbable> 
    <tab name="tabname1"><content1></content1></tab> 
    <tab name="tabname2"><content2></content2></tab> 
    <tab name="tabname3"><content3></content3></tab> 
</tabbable> 

трансформироваться в:

<div> 
    <ul> 
     <li>tabname1</li> 
     <li>tabname2</li> 
     <li>tabname3</li> 
    </ul> 

    <div class="baltab"> 
     <div><transformed-content1/></div> 
     <div><transformed-content2/></div> 
     <div><transformed-content3/></div> 
    </div> 
</div> 

К сожалению, я не могу найти подробные учебники для XSLT.

+0

С какой версией XSLT вы работаете? Кроме того, я не думаю, что вы не нашли учебник для XSLT, а на самом деле _looking_ для него. Вы попробовали googling «XSLT»? –

+0

Да, я сделал, я нашел учебники об основах, и все. Теперь я изучаю фрагменты кода, которые находятся здесь, в стеке и других сайтах. –

+0

Если вы знаете основы, вы должны опубликовать XSLT, с которым вы столкнулись, даже если он не работает. Мы здесь не для кода, мы помогаем вам улучшить ваш код. –

ответ

1

Решение проще, как я первый думать:

Только нужно два для-каждого цикла, с правым элементом, выбранным:

вход:

<?xml version="1.0" encoding="ISO-8859-1"?> 
    <tabbedpane> 
    <tab text="tablabel1"> 
     <label text="tabcontent1"/> 
    </tab> 
    <tab text="tablabel2"> 
     <label text="tabcontent2"/> 
    </tab> 
    <tab text="tablable3"> 
     <label text="tabcontent3"/> 
    </tab> 

преобразования XML:

<xsl:template match="tabbedpane"> 
<div class="LFT tabbable"> 
    <ul class="nav nav-tabs"> 
    <xsl:for-each select="tab"> 
    <li class="tab_label"> 
     <xsl:value-of select="@text"/> 
    </li> 
    </xsl:for-each> 
    </ul> 
    <div class="tabs_holder"> 
    <xsl:for-each select="tab"> 
     <div class="single_tab"> 
      <xsl:apply-templates/> 
     </div> 
    </xsl:for-each> 
    </div> 
</div> 
</xsl:template> 

<xsl:template match="label"> 
    <h6> 
    <xsl:if test="@id"> 
     <xsl:attribute name="id"> 
      <xsl:value-of select="@id" /> 
     </xsl:attribute> 
    </xsl:if> 

     <xsl:value-of select="@text"/> 
    </h6> 
    </xsl:template> 

и результат:

<div class="LFT tabbable"> 
    <ul class="nav nav-tabs"> 
     <li class="tab_label">tablabel1</li> 
     <li class="tab_label">tablabel2</li> 
     <li class="tab_label">tablable3</li> 
    </ul> 

    <div class="tabs_holder"> 
     <div class="single_tab"> 
      <h6>tabcontent1</h6> 
     </div> 

     <div class="single_tab"> 
      <h6>tabcontent2</h6> 
     </div> 

     <div class="single_tab"> 
      <h6>tabcontent3</h6> 
     </div> 
    </div> 
</div> 

Как мне было нужно.

+0

Для дальнейшего использования вы можете захотеть взглянуть на концепцию шаблона _modes_, что позволяет определить разные группы шаблонов, которые соответствуют тем же узлам, но делают с ними разные вещи. –

Смежные вопросы