2012-12-28 50 views
0

我使用以下XSLT:刪除自我封閉不必要的標記XSLT

https://gist.github.com/4402884

如果下面的模板做了改造,使HTML輸出如下:

<li> 
    <div class="content-left" style="float:left; width:300px"> content </div> 

    <div class="content-left" style="float:left; width:300px">content </div> 
</li> 

<li> 
    <div class="content-left" style="float:left; width:300px"> content </div> 

    <div class="content-left" style="float:left; width:300px">content </div> 
</li> 
. 
. 
. 

等。 實際的XSLT正在做這項工作來獲得這樣的兩列布局:

A-----B 
C-----D 
E-----F 

其中每行是一個「禮」項目

<xsl:choose> 
    <xsl:when test="$CurPos mod 2 =1"> 
     <xsl:text disable-output-escaping="yes">&lt;li style=&quot;width:610px; height:290px; &quot;&gt;</xsl:text>  
     <div class="content-left" style="width:290px; height:290px;float:left;"> 
      <xsl:value-of select="@PublishingRollupImage" disable-output-escaping="yes" /> 
      <span class="NewsHeading"><h4><xsl:value-of select="$CurPos"/><xsl:value-of select="@Title"/></h4></span> 
      <span class="Desc" style="display:block; width:280px;"><xsl:value-of select="substring(@Comments,0,200)"/> 
      <xsl:if test="string-length(@Comments) &gt; 200">…</xsl:if><a href="{$SafeLinkUrl}" class="ReadMore"> Read More</a></span> 
     </div> 

     <div class="content-right" style="float:right; width:290px; height:290px;"> 
      <xsl:if test="$CurPos != $LastRow "> 
       <xsl:value-of select="following-sibling::*[1]/@PublishingRollupImage" disable-output-escaping="yes" /> 
       <span class="NewsHeading"><h4><xsl:value-of select="$LastRow"/><xsl:value-of select="following-sibling::*[1]/@Title"/></h4></span> 
       <span class="Desc" style="display:block; width:280px;"><xsl:value-of select="substring(following-sibling::*[1]/@Comments,0,200)"/> 
       <xsl:if test="string-length(following-sibling::*[1]/@Comments) &gt; 200">…</xsl:if> 
       <a href="{$SibSafeLinkUrl}" class="ReadMore"> Read More</a></span> 
      </xsl:if> 
     </div> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:text disable-output-escaping="yes">&lt;/li&gt;</xsl:text> 
    </xsl:otherwise> 
</xsl:choose> 

但不幸的是Inernet Explorer中產生不必要的自我封閉標籤像這樣(只是IE),FF和鉻使其正確...

<li> 
    <div class="content-left" style="float:left; width:300px"> content </div> 

    <div class="content-left" style="float:left; width:300px">content </div> 
</li></li/></li/> 

<li> 
    <div class="content-left" style="float:left; width:300px"> content </div> 

    <div class="content-left" style="float:left; width:300px">content </div> 
</li></li/></li/> 

我該如何擺脫那些不必要的自閉怪異的'li'標籤?因爲我需要一個jquery滑塊插件的精確html結構來工作,由於不需要的標籤,滑塊行爲不當。

這是IE: IE http://www.imagesup.net/?di=9135673644516

這是在FireFox: FF http://www.imagesup.net/?di=11135673652612

+2

如果你避免使用能源部,很可能你不會得到無法解釋的輸出。 –

+0

你能給我們一個完整的樣本輸入嗎? – PCM

+0

@DimitreNovatchev發現無法解釋的輸出似乎只出現在IE 8中。IE 9,Chrome,FireFox確實不錯......有沒有辦法在XSLT中定位特定版本的瀏覽器,就像我們在CSS中一樣? – Athapali

回答

3

我不知道這將解決你的問題,但我會認真考慮重新跳汰一下xsl:選擇語句。我猜你正在使用disable-output-escaping,因爲如果你試圖像下面的例子那樣編寫你的XSLT,它將不會是格式良好的XML,因此無效。 (爲了簡潔起見,我刪減了代碼示例)。

<xsl:choose> 
    <xsl:when test="$CurPos mod 2 =1"> 
     <li> 
     <div class="content-left"> 
      <xsl:value-of select="@PublishingRollupImage" /> 
     </div> 
     <div class="content-right"> 
      <xsl:value-of select="following-sibling::*[1]/@PublishingRollupImage" /> 
     </div> 
    </xsl:when> 
    <xsl:otherwise> 
     </li> 
    </xsl:otherwise> 
</xsl:choose> 

什麼你正在努力實現是組一起對元件的,所以選擇在位置1,3,5等中的元素,然後輸出該元件和下面的一個。

爲了避免使用禁用輸出轉義,你可以這樣做,而不是像這樣重寫。

<xsl:if test="$CurPos mod 2 =1"> 
    <li> 
     <div class="content-left"> 
     <xsl:value-of select="@PublishingRollupImage" /> 
     </div> 
     <div class="content-right"> 
     <xsl:value-of select="following-sibling::*[1]/@PublishingRollupImage" /> 
     </div> 
    </li> 
</xsl:if> 

現在這是良好的,和李元件直接被輸出。這是否能解決您的問題,這可能是值得的。