2012-08-06 61 views
1

這是我在XML:XSL轉換族元素這就是遵循

 <par level="4">Hi </par> 
     <par level="4">There!</par> 
     <par level="12">abcd :</par> 
     <par level="12">efgh .</par> 
     <par level="4">azert</par> 
     <par level="4">yuio</par> 
     <par level="4">p</par> 
     <par level="4">)</par> 

當我讀到PAR元素我想,直到級別屬性仍然是相同的前一到Concat的同一DIV裏面的內容。但是如果LEVEL改變了,我需要創建一個新的DIV。內容順序不必改變,所以第一個「第4級」PAR不必與第二個合併。除了我提到的最後一點外,我看到過類似的問題。

因此,這裏是我想要的東西后,XSL轉換上述樣品:(XSLT 1.0)

 <div class="level4"> 
     Hi there! 
     </div> 
     <div class="level12"> 
     abcd :efgh . 
     </div>   
     <div class="level4"> 
     azertyuiop) 
     </div> 

我已經有一個模板的xsl:模板匹配=「相提並論」>有很多的代碼中。 你能提出什麼建議來實現這一目標?

+0

這些假設是level14嗎? <參數級別= 「4」> azert <參數級別= 「4」> yuio <參數級別= 「4」>點 <參數級別= 「4」>) – james31rock 2012-08-06 14:46:35

+0

@ james31rock:沒有有2個「4級」塊。並且他們不必被分組在同一個div裏面... – Sebange 2012-08-06 14:55:38

回答

0

你可以做這樣的事情:

XML輸入(修改爲合格的)

<doc> 
    <par level="4">Hi </par> 
    <par level="4">There!</par> 
    <par level="12">abcd :</par> 
    <par level="12">efgh .</par> 
    <par level="4">azert</par> 
    <par level="4">yuio</par> 
    <par level="4">p</par> 
    <par level="4">)</par> 
</doc> 

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="par[not(@level = preceding-sibling::par[1]/@level)]"> 
     <div class="level{@level}"> 
      <xsl:value-of select="."/>  
      <xsl:apply-templates select="(following-sibling::par[1])[@[email protected]]" mode="dump"/>  
     </div> 
    </xsl:template> 

    <xsl:template match="par[preceding-sibling::par[1]/@[email protected]]"/> 

    <xsl:template match="par" mode="dump"> 
     <xsl:value-of select="."/> 
     <xsl:if test="following-sibling::par[1]/@level = @level"> 
      <xsl:apply-templates select="following-sibling::par[1]" mode="dump"/> 
     </xsl:if> 
    </xsl:template> 

</xsl:stylesheet> 

輸出

<doc> 
    <div class="level4">Hi There!</div> 
    <div class="level12">abcd :efgh .</div> 
    <div class="level4">azertyuiop)</div> 
</doc> 
+0

我在我的代碼裏面試試這個,謝謝! – Sebange 2012-08-07 06:45:33