XSLT打印检查

时间:2016-06-21 16:33:40

标签: xml xslt

我正在使用XSLT 1.0。我的XML文件看起来像这样

<Results>
  <comment>Test 1</comment>
  <Action>
    <Result>Passed</Result>
  </Action>
  <Action>
    <Result>Passed/Result>
  </Action>

  <comment>Test 2</comment>
  <Action>
    <Result>Failed</Result>
  </Action>
  <Action>
    <Result>Failed</Result>
  </Action>

  <comment>Test 3</comment>
  <Action>
    <Result>Failed</Result>
  </Action>
  <Action>
    <Result>Passed</Result>
  </Action>
  <Action>
    <Result>Failed</Result>
  </Action>

  <comment>Test 4</comment>
  <Action>
    <Result>Passed</Result>
  </Action>
  <Action>
    <Result>Passed</Result>
  </Action>
  <Action>
    <Result>Passed</Result>
  </Action>      
</Results>

如果测试用例失败,如何打印出失败,但每个测试用例只执行一次。我每次都可以使用for-each来打印失败。我这样做的方式,它会在某些情况下打印掉大量的失败,但是我不想看看只有失败的10多行。我尝试过使用count和number,但是我还没有想出任何看起来真的有用的东西。

我的代码看起来像

<xsl:for-each select="Results">
    <xsl:for-each select="Action[Result='Failed']">
        <tr title = "binit">
            <td bgcolor="#CCCCCC">Failed </td>
        </tr>
    </xsl:for-each>
</xsl:for-each>

如何打印

Test 1
Test 2
Failed
Test 3
Failed
Test 4

而不是

Test 1
Test 2
Failed
Failed
Test 3
Failed
Failed 
Test 4

html应该看起来像

<html>
    <head>
    </head>
    <body>
        <table>
            <tbody>
                <tr>
                    <td>Test 1</td>
                </tr>
                <tr>
                    <td>Test 2</td>
                </tr>
                <tr>
                    <td>Failed</td>
                </tr>
                <tr>
                    <td>Test 3</td>
                </tr>
                <tr>
                    <td>Failed</td>
                </tr>
                <tr>
                    <td>Test 4</td>
                </tr>
            </tbody>
        </table>
    </body>
</html>

2 个答案:

答案 0 :(得分:0)

我想你想做点什么:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:key name="actions" match="Action" use="generate-id(preceding-sibling::comment[1])" />

<xsl:template match="/Results">
    <table>
        <xsl:for-each select="comment">
            <tr>
                <td>
                    <xsl:value-of select="."/>
                </td>
            </tr>   
            <xsl:if test="key('actions', generate-id())[Result='Failed']">
                 <tr>
                    <td>Failed</td>
                </tr>
            </xsl:if>
        </xsl:for-each>
    </table>
</xsl:template>

</xsl:stylesheet>

答案 1 :(得分:0)

对此感到抱歉..我需要在此处构建一个问题以获取格式..

我怀疑答案是一些丑陋的xslt因为xml输入的结构不能很好地解决问题:你能否将输入xml改为这两个选项之一:

<Results>
  <comment>Test 1</comment>
  <Actions>
    <Action>
     <Result>Passed</Result>
    </Action>
    <Action>
     <Result>Passed/Result>
    </Action>
  </Actions>
 ...
</Results>

<Results>
   <Test>
     <comment>Test 1</comment>
     <Action>
        <Result>Passed</Result>
      </Action>
      <Action>
        <Result>Passed/Result>
      </Action>
  </Test>
 ...
</Results>