我是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 :(得分: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>
正如我所需。