2013-01-08 29 views
0

我使用模板来显示我在找什么。 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

而且xml中也没有定义的节点号。谢谢 – Roomy

+0

输出模式为'text'还是'html'? – SkyDan

+0

是它的HTML模式。 – Roomy

回答

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() &lt;= $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() &lt;= $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样式,以使左列浮动左,右列浮动右,并自定义列表式,间距等。

+0

是的,我正在寻找HTML。 – Roomy

0

这应该工作:

<xsl:template match="items"> 
    <table> 
     <xsl:variable name="rowCount" select="ceiling(count(info) div 2)" /> 
     <xsl:for-each select="info[position() &lt;= $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> 
+0

谢谢,但我已经实现了这个接近。 – Roomy

+0

它有什么问题?你想给我们一些关于你特别想要的信息吗? – JLRishe

+0

请看输出要求。谢谢 – Roomy