我需要选择所有奇数位置元素并将它们放在左浮动div和右浮动div中的所有偶数元素中:
<rows>
<row title="A" />
<row title="B" />
<row title="C" />
<row title="D" />
<row title="E" />
<row title="F" />
</rows>
==================转换为===&gt;
A-----B
C-----D
E-----F
我正在使用以下xsl:
<div class="content-left" style="width:250px; float:left;">
<span class="NewsHeading">
<h4><xsl:value-of select="@Title"/></h4>
</span>
</div>
<div class="content-right" style="float:right">
<span class="NewsHeading">
<h4><xsl:value-of select="following-sibling::*[1]/@Title"/></h4>
</span>
</div>
但我的XSLT产生以下内容:
A----B
B----C
C----D
D----E
E----F
如何使第二行从第一行的兄弟后面的兄弟姐妹开始?
听起来有点奇怪......基本上我只是不想重复......
答案 0 :(得分:1)
你可能在某个地方有一个'xsl:for-each select =“rows / row”'元素?
然后只需用
替换它<xsl:for-each select="rows/row[position() mod 2 = 1]">
仅将模板应用于每个第二行
答案 1 :(得分:1)
以下是完整的解决方案:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<div class="content-carousel">
<ul class="bjqs">
<xsl:apply-templates select="*[position() mod 2 =1]"/>
</ul>
</div>
</xsl:template>
<xsl:template match="row">
<li>
<div class="content-left">
<h4><xsl:value-of select="@title"/></h4>
</div>
<div class="content-right">
<h4><xsl:value-of select="following-sibling::*[1]/@title"/></h4>
</div>
</li>
</xsl:template>
</xsl:stylesheet>
将此转换应用于提供的XML文档时:
<rows>
<row title="A" />
<row title="B" />
<row title="C" />
<row title="D" />
<row title="E" />
<row title="F" />
</rows>
产生了想要的正确结果:
<div class="content-carousel">
<ul class="bjqs">
<li>
<div class="content-left">
<h4>A</h4>
</div>
<div class="content-right">
<h4>B</h4>
</div>
</li>
<li>
<div class="content-left">
<h4>C</h4>
</div>
<div class="content-right">
<h4>D</h4>
</div>
</li>
<li>
<div class="content-left">
<h4>E</h4>
</div>
<div class="content-right">
<h4>F</h4>
</div>
</li>
</ul>
</div>