2013-12-02 11 views
0

Итак, у меня есть это до сих пор, чтобы создать несколько таблиц.XSL создает несколько таблиц, используя несколько условий.

<xsl:for-each select="report/issue"> 
      <table id="@name" class="idwb sortable"> 


      <tr> 
       <th class="center">Filename</th> 
       <th class="center">Level</th> 
       <th class="center">GID</th> 
       <th class="center">Message</th>   
       <th class="center">XPath</th> 
       <th class="center">Line Number</th> 
       <th class="center">Help</th>     
      </tr> 

       <!--xsl:sort select="@filename" order="descending" data-type="text" /--> 
       <tr onmouseover="this.style.backgroundColor='#f5f6be';" 
        onmouseout="this.style.backgroundColor= '';"> 

        <xsl:attribute name="class">alt_0</xsl:attribute> 

        <td class="center"> 

          <a href="{@infocenterURL}"><xsl:value-of select="@filename" /></a> 

        </td> 

        <td align="center"> 
         <xsl:value-of select="@level" /> 
        </td> 

        <td align="center"> 
         <xsl:value-of select="@gid" /> 
        </td> 
        <td align="center"> 
         <xsl:value-of select="@message" /> 
        </td> 

        <td align="center"> 
         <xsl:value-of select="@xpath" /> 
        </td> 

        <td align="center"> 
         <xsl:value-of select="@linenum" /> 
        </td> 
        <td alight="center"> 

        <a href="{@helplink}">More</a> 

        </td> 

       </tr>     
       </table> 
       <br /> 
       <br /> 
      </xsl:for-each>    

Ничто не может поджечь мир. Проблема в том, что это создает таблицу для каждой записи, но я хочу только создавать таблицы для каждого имени и уровня файла, и все записи, касающиеся этого имени файла и уровня, будут находиться под ним. Есть ли в настоящее время делать это без использования javascript?

Пример XML

<issue filename="file.html" 
     gid="506" 
     helplink="www.somewhere.com" 
     infocenterURL="www.somewhere.com" 
     level="Potential Violation" 
     linenum="49" 
     message="stuff nneeds to happen" 
     xpath="/html/body/div[3]/img"/> 

Что мне нужно случиться, что для каждого имени файла есть, мне нужна таблица со всеми вопросами, которые соответствуют таким же именем и тот же уровень нарушения. Уровни нарушения фиксированы до 5, и я знаю их все. Но имена файлов динамические.

ответ

0

Если вы хотите сделать что-то «для каждого отчета» (вместо «для каждого вопроса»), то говоря <xsl:for-each select="report/issue"> не будет работать.

Но у меня есть несколько других замечаний, тоже:

  • Во-первых, не сделать изменения стиля в ответ на позицию мыши с JavaScript. Когда-либо. Используйте псевдокласс для CSS :hover, он был создан именно для этой цели.
  • То же самое касается чередующихся цветов строк. CSS имеет :nth-child(odd) и :nth-child(even).
  • Далее, не используйте <xsl:for-each>. Используйте сопоставление шаблонов. Таким образом вы получите более модульный, менее глубоко вложенный код, с шаблонами, которые вам не нужно прокручивать несколькими экранами, чтобы увидеть, что они делают.
  • Явно использую <thead> и <tbody> - это хорошая идея.
  • Ради согласованности: решите, хотите ли вы align="center" или class="center".

Имея это в виду ...

<xsl:template match="/"> 
    <xsl:apply-templates select="report" /> 
</xsl:template> 

<!-- <report> becomes <table>... --> 
<xsl:template match="report"> 
    <table id="@name" class="idwb sortable"> 
    <thead> 
     <tr> 
      <th class="center">Filename</th> 
      <th class="center">Level</th> 
      <th class="center">GID</th> 
      <th class="center">Message</th>   
      <th class="center">XPath</th> 
      <th class="center">Line Number</th> 
      <th class="center">Help</th>     
     </tr> 
    </thead> 
    <tbody> 
     <xsl:apply-templates select="issue"> 
     <xsl:sort select="@filename" order="descending" data-type="text" /> 
     </xsl:apply-templates> 
    </tbody> 
    </table> 
</xsl:template> 

<!-- <issue> becomes <tr>... --> 
<xsl:template match="issue"> 
    <tr class="alt_0"> 
    <td class="center"><a href="{@infocenterURL}"><xsl:value-of select="@filename" /></a></td> 
    <td class="center"><xsl:value-of select="@level" /></td> 
    <td class="center"><xsl:value-of select="@gid" /></td> 
    <td class="center"><xsl:value-of select="@message" /></td> 
    <td class="center"><xsl:value-of select="@xpath" /></td> 
    <td class="center"><xsl:value-of select="@linenum" /></td> 
    <td class="center"><a href="{@helplink}">More</a></td> 
    </tr> 
</xsl:template> 
+0

Нету она должна быть в каждом номере. Я должен опубликовать пример XML, сначала проверьте первый пост. – user2983601

+0

А, я вижу, поэтому вы хотите * группировать * '@ filename'? Это, конечно, совсем другое. Ответ на этот вопрос лежит буквально в сотнях, если не тысячах ответов StackOverflow, которые объясняют Muenchian Grouping (в случае XSLT 1.0) или использование '' (в случае XSLT 2.0). – Tomalak

+0

Итак, если я хочу группироваться по имени файла и уровню нарушения, это не будет проблемой? – user2983601

Смежные вопросы