Javascript XSL使用多个条件创建多个表

Javascript XSL使用多个条件创建多个表,javascript,xslt,foreach,Javascript,Xslt,Foreach,到目前为止,我已经创建了多个表 <xsl:for-each select="report/issue"> <table id="@name" class="idwb sortable"> <tr> <th class="center">Filename</th> <th class="center">Level

到目前为止,我已经创建了多个表

<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>             

文件名
水平仪
基德
消息
XPath
行号
帮助
alt_0


没有什么会让世界着火的。问题是,这会为每个条目创建一个表,但我只想为每个文件名和级别创建表,所有关于该文件名和级别的条目都会放在下面。目前是否还可以不使用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,我知道所有的违规级别。但是文件名是动态的。

如果你想“针对每个报告”(而不是“针对每个问题”)做一些事情,那么说
是行不通的

但我还有几点其他意见:

  • 首先,不要使用JavaScript更改样式以响应鼠标位置。曾经使用CSS
    :hover
    伪类,它就是为了这个目的而创建的
  • 交替行颜色也是如此。CSS有
    :第n个孩子(奇数)
    :第n个孩子(偶数)
  • 接下来,不要使用
    。使用模板匹配。通过这种方式,您将获得更模块化、嵌套更少的代码,模板不需要滚动几个屏幕就可以看到它们在做什么
  • 有时明确使用
    是个好主意
  • 为了保持一致性:决定是要使用
    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>

文件名
水平仪
基德
消息
XPath
行号
帮助

不,它必须是每一个问题。我应该发布一个XML示例,再次检查第一篇文章。啊,我明白了,所以您想按
@filename
分组吗?当然,这完全是另一回事。答案是成百上千的StackOverflow答案,解释了Muenchian分组(在XSLT 1.0的情况下)或
(在XSLT 2.0的情况下)的使用。因此,如果我想按文件名和冲突级别分组,这不会成为问题吗?不,不会。在XSLT1.0中有点难,但肯定是可能的。在XSLT2.0中,分组通常更容易。这里也有两种语言版本的多层次分组示例。(如果您尝试并陷入困境,您可以用您的尝试更新此问题并ping我,或者编写一个新问题-我只是试图避免从头开始编写另一个XSLT分组示例。)谢谢您,但最后一个问题是XSLT 1.0 vs 2.0兼容性,如果我将代码移动到2.0,是否存在任何重大问题,或者我是否应该学习使用1.0进行分组