2012-11-28 139 views
0

我有這個span元素與類的autbib-pc-bold-italicXSLT文本換行與多個標籤

<span class="autbib-pc-bold-italic">autbib</span> 

我要上@class屬性值來創建元素標籤基地:

我的輸出應該是:

<autbib><pc><bold><italic>autbib</italic></bold></pc></autbib> 

這裏是我的XSL模板:

<xsl:template match="span[contains(@class,'autbib')]"> 
    <xsl:call-template name="pbib.loop"> 
     <xsl:with-param name="count" select="count(tokenize(@class, '-'))"/> 
     <xsl:with-param name="class" select="tokenize(@class, '-')"/> 
    </xsl:call-template> 
</xsl:template> 

<xsl:template name="pbib.loop"> 
    <xsl:param name="index" select="1" /> 
    <xsl:param name="count" select="count(tokenize(@class, '-')) + 1"/> 
    <xsl:param name="class" select="tokenize(@class, '-')"/> 
    <xsl:element name="{$class[1]}"> 
     <xsl:if test="not($index = $count)"> 
      <xsl:element name="{$class[$index]}"> 
       <xsl:apply-templates/> 
      </xsl:element> 
     </xsl:if> 
    </xsl:element> 

    <xsl:if test="not($index = $count)"> 
     <xsl:call-template name="pbib.loop"> 
      <xsl:with-param name="index" select="$index + 1" /> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 

而且有這樣的輸出這是錯誤的:

<autbib> 
    <pc>autbib</pc> 
    <bold>autbib</bold> 
    <italic>autbib</italic> 
</autbib> 

我需要有這樣的輸出:

<autbib> 
    <pc> 
     <bold> 
      <italic>autbib</italic> 
     </bold> 
    </pc> 
</autbib> 

我的問題是,我不知道我應該把xsl:apply-template以便標籤彼此包裝。

回答

0

這裏是我的建議:

<xsl:stylesheet 
    version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs"> 

<xsl:output indent="yes"/> 

<xsl:template match="span[contains(@class,'autbib')]"> 
    <xsl:param name="classes" select="tokenize(@class, '-')"/> 
    <xsl:choose> 
    <xsl:when test="not($classes[1])"> 
     <xsl:apply-templates/> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:element name="{$classes[1]}"> 
     <xsl:apply-templates select="."> 
      <xsl:with-param name="classes" select="$classes[position() gt 1]"/> 
     </xsl:apply-templates> 
     </xsl:element> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

</xsl:stylesheet> 

隨着撒克遜9.4是將輸入

<span class="autbib-pc-bold-italic">autbib</span> 

到結果

<autbib> 
    <pc> 
     <bold> 
     <italic>autbib</italic> 
     </bold> 
    </pc> 
</autbib> 
+0

謝謝馬丁!它像一個魅力。 – rhemb