Заменить этот код :
<xsl:template match="/rss/channel">
<div class="RSS_Gadget">
<div class="RSS_Content">
<ul id="widget">
<xsl:apply-templates select="item" />
<!-- <xsl:apply-templates select="following-sibling::item" mode="extra" />-->
</ul>
</div>
</div>
</xsl:template>
<xsl:template match="item">
<li>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="link"/>
</xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
<xsl:value-of select="title"/>
</xsl:element>
<div class="RSS_Body" >
<xsl:value-of select="description" disable-output-escaping="yes" />
</div>
</li>
</xsl:template>
на :
<xsl:template match="/rss/channel">
<div class="RSS_Gadget">
<div class="RSS_Content">
<ul id="widget">
<xsl:apply-templates select="item[position() mod 2 = 1]" />
</ul>
</div>
</div>
</xsl:template>
<xsl:template match="item">
<li>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="link"/>
</xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
<xsl:value-of select="title"/>
</xsl:element>
<div class="RSS_Body" >
<xsl:value-of select="description" disable-output-escaping="yes" />
</div>
</li>
<xsl:apply-templates select="following-sibling::item[1]" mode="extra"/>
</xsl:template>
Пояснение :
Эта инструкция:
<xsl:apply-templates select="item[position() mod 2 = 1]" />
Применяет шаблоны к первому элементу item
каждой пары двух смежных item
братьев и сестер (к 1st
, 3rd
, ... 2k+1st
item
child).
Затем в шаблоне, который соответствует элементу item
, после обработки сопоставленного элемента применяется другой шаблон для / для обработки его ближайшего следующего брата:
<xsl:apply-templates select="following-sibling::item[1]" mode="extra"/>
Примечание : Весьма вероятно, что вам не нужно использовать DOE (атрибут disable-output-escaping
) в вашем коде.Всегда старайтесь избегать использования DOE, потому что это не является обязательной функцией XSLT (не все процессоры XSLT поддерживают и реализуют ее), и ее использование нарушает архитектурную модель XSLT.