我使用模板来展示我在寻找什么。 XSLT对我来说是新的。
XML:
<info>
<ID>5</ID>
<Name>A</Name>
</info>
<info>
<ID>5</ID>
<Name>B</Name>
</info>
<info>
<ID>5</ID>
<Name>C</Name>
</info>
<info>
<ID>5</ID>
<Name>D</Name>
</info>
<info>
<ID>5</ID>
<Name>E</Name>
</info>
<info>
<ID>5</ID>
<Name>F</Name>
</info>
<info>
<ID>5</ID>
<Name>G</Name>
</info>
<info>
<ID>5</ID>
<Name>H</Name>
</info>
<info>
<ID>5</ID>
<Name>I</Name>
</info>
<info>
<ID>5</ID>
<Name>J</Name>
</info>
我正在寻找的输出是:
A E
B F
C G
D H
根据输入xml输出不正确。
答案 0 :(得分:2)
由于您尚未指定输出格式,因此以下XSLT只输出一个简单的HTML。
<xsl:template match="items"> <!-- original XML should be wrapped in a parent element `items`-->
<xsl:variable name="rows" select="count(item) div 2"/>
<xsl:for-each select="item[position() <= $rows]">
<xsl:variable name="pos" select="position()"/>
<xsl:value-of select="name"/>
<xsl:value-of select="../item[$pos + $rows]"/>
<br/>
</xsl:for-each>
</xsl:template>
更新由于您只是明确指定输出格式是HTML,这种方式可能更好:
<xsl:template match="items">
<xsl:variable name="rows" select="count(item) div 2"/>
<ul id="left-column">
<xsl:for-each select="item[position() <= $rows]">
<li><xsl:value-of select="name"/></li>
</xsl:for-each>
</ul>
<ul id="right-column">
<xsl:for-each select="item[position() > $rows]">
<li><xsl:value-of select="name"/></li>
</xsl:for-each>
</ul>
</xsl:template>
为了使输出完全符合您的要求,我们需要添加CSS样式以使左列浮动左右浮动,并自定义列表样式,间距等。
答案 1 :(得分:0)
这应该有效:
<xsl:template match="items">
<table>
<xsl:variable name="rowCount" select="ceiling(count(info) div 2)" />
<xsl:for-each select="info[position() <= $rowCount]">
<xsl:variable name="pos" select="position()" />
<td>
<td>
<xsl:value-of select="Name"/>
</td>
<td>
<xsl:value-of select="../info[$pos + $rowCount]/Name"/>
</td>
</td>
</xsl:for-each>
</table>
</xsl:template>