2013-01-08 28 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