删除自闭合不必要的标记xslt

时间:2012-12-28 23:16:03

标签: jquery html xml 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

其中每一行都是'li'项目

 <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和chrome正确渲染...

<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

1 个答案:

答案 0 :(得分:3)

我不确定这会解决您的问题,但我会强烈考虑重新编写您的xsl:choose语句。我猜您正在使用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等中的元素,然后输出该元素和下一个元素。

为了避免使用disable-output-escaping,你可以做的是重写它。

<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>

现在格式正确, li 元素正在直接输出。无论这是否能解决您的问题,这都值得做。