Как преобразовать XML (сгенерированный из набора данных) в HTML, используя xslt - PullRequest
1 голос
/ 28 марта 2011

Попытка получить html из xml, который я сгенерировал после xml из набора данных, что означает, что я не могу изменить структуру XML. Я думаю, что мне не хватает второго цикла, который проходит через A и B.

<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 Ответ

1 голос
/ 28 марта 2011

xslt чувствителен к регистру;для каждой строки вам понадобится

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

, и вам нужно будет использовать мюнхенскую группировку, чтобы получить один <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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...