2011-03-28 39 views
1

嘗試從xml中獲取html 我從數據集中生成了以下xml,這意味着我無法更改XML的結構。我認爲我錯過了第二個循環通過A和B循環。如何使用xslt將XML(從數據集生成)轉換爲HTML

<Myds> 
    <A> 
    <col1>Row1</col1> 
    <col2>1</col2> 
    <col3>2</col3> 
    </A> 
    <A> 
    <col1>Row2</col1> 
    <col2>4</col2> 
    <col3>3</col3> 
    </A> 
    <B> 
    <col1>Row1</col1> 
    <col2>1</col2> 
    <col3>2</col3> 
    </B> 
    <B> 
    <col1>Row2</col1> 
    <col2>4</col2> 
    <col3>3</col3> 
    </B> 
</Myds> 

這是XSL

 <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> 
       <xsl:template match='/'> 
        <xsl:for-each select ='./Myds'> 
        <table> 
          <xsl:for-each select ='A'> 
           <tr> 
            <td><xsl:value-of select='col1'/></td> 
            <td><xsl:value-of select='col2'/></td> 
            <td><xsl:value-of select='col3'/></td> 
           </tr> 
          </xsl:for-each> 
        </table> 
        </xsl:for-each> 
       </xsl:template> 
     </xsl:stylesheet> 

我有這個輸出

<?xml version="1.0" encoding="utf-8"?> 
    <table> 
    <tr><td>Row1</td><td>1</td><td>2</td></tr> 
    <tr><td>Row2</td><td>4</td><td>3</td></tr> 
    </table> 

但我期待這個

 <table>//(For Table A) 
     <tr><td>Row1</td><td>1</td><td>2</td></tr> 
     <tr><td>Row2</td><td>4</td><td>3</td></tr> 
     </table> 
     <table>//(For Table B) 
     <tr><td>Row1</td><td>1</td><td>2</td></tr> 
     <tr><td>Row2</td><td>4</td><td>3</td></tr> 
     </table> 

我想我需要這樣的事,但不完全如何...

 <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> 
       <xsl:template match='/'> 
        <xsl:for-each select ='./Myds'> 
        <table> 
          <xsl:for-each select ='UNIQUE SECOND NODE'> 
           <tr> 
            <td><xsl:value-of select='col1'/></td> 
            <td><xsl:value-of select='col2'/></td> 
            <td><xsl:value-of select='col3'/></td> 
           </tr> 
          </xsl:for-each> 
        </table> 
        </xsl:for-each> 
       </xsl:template> 
      </xsl:stylesheet> 

回答

1

xslt區分大小寫;對於每一行,你需要

<td><xsl:value-of select='col1'/></td> 
<td><xsl:value-of select='col2'/></td> 
<td><xsl:value-of select='col3'/></td> 

,你需要使用Muenchian分組的,讓每樣命名元素一個<table>

<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> 
<xsl:key name="byTable" match="/Myds/*" use="name()" /> 
<xsl:template match='/'> 
    <xsl:for-each select="Myds/*[generate-id() = generate-id(key('byTable', name())[1])]"> 
    <table> 
     <xsl:comment>for <xsl:value-of select="name()"/></xsl:comment> 
     <xsl:for-each select ="key('byTable', name())"> 
     <tr> 
      <td><xsl:value-of select='col1'/></td> 
      <td><xsl:value-of select='col2'/></td> 
      <td><xsl:value-of select='col3'/></td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 
+0

@馬克我覺得我缺少與第二環具有不同的節點。我改變了案子。 – Thunder 2011-03-28 12:15:46

+0

@雷霆看到更新 – 2011-03-28 12:17:53

+0

@Mark我試過但得到了錯誤'byTable'是一個意想不到的標記 – Thunder 2011-03-28 12:35:54