XSLT转换交叉放置的标签

时间:2014-01-16 12:35:10

标签: 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的详细教程。

1 个答案:

答案 0 :(得分: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>

正如我所需。