0

次の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は、次のような2列のレイアウトを取得するためのジョブを実行します。

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">…&lt;/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">…&lt;/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

4

1 に答える 1

3

これで問題が解決するかどうかはわかりませんが、xsl:chooseステートメントを再調整することを強く検討します。次のサンプルのようにXSLTを作成しようとすると、整形式のXMLにならず、無効になるため、disable-output-escapingを使用していると思います。(簡潔にするために、コードサンプルを要約しました)。

<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要素が直接出力されています。これで問題が解決するかどうかにかかわらず、おそらく実行する価値があります。

于 2012-12-29T17:17:49.580 に答える