首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XSLT过滤掉不需要的XML数据

使用XSLT过滤掉不需要的XML数据
EN

Stack Overflow用户
提问于 2014-10-08 20:50:21
回答 1查看 85关注 0票数 0

我有以下NUnit结果XML

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="C:\Selenium\TestResults\NewVersion.xsl"?>
<!--This file represents the results of running a test suite-->
<test-results name="C:\Selenium\VisualStudio\Automated Tests\Automated Tests\AutomatedTests\bin\Debug\AutomatedTests.dll" total="2" errors="1" failures="0" not-run="0" inconclusive="0" ignored="0" skipped="0" invalid="0" date="2014-10-06" time="11:54:11">
<environment nunit-version="2.6.3.13283" clr-version="2.0.50727.5485" os-version="Microsoft Windows NT 6.1.7601 Service Pack 1" platform="Win32NT" cwd="C:\Selenium" machine-name="U0130917-TPL-A" user="U0130917" user-domain="TEN" />
  <culture-info current-culture="en-GB" current-uiculture="en-US" />
 <test-suite type="Assembly" name="C:\Selenium\VisualStudio\Automated Tests\Automated Tests\AutomatedTests\bin\Debug\AutomatedTests.dll" executed="True" result="Failure" success="False" time="123.997" asserts="0">
   <results>
  <test-suite type="Namespace" name="AutomatedTests" executed="True" result="Failure" success="False" time="123.971" asserts="0">
    <results>
      <test-suite type="TestFixture" name="GridClientListPageVerificationGridTest" executed="True" result="Failure" success="False" time="123.913" asserts="0">
        <categories>
          <category name="GridSpitfireTests" />
        </categories>
        <results>
          <test-case name="AutomatedTests.GridClientListPageVerificationGridTest.ClientListPageVerificationGridTest_MainTest" executed="True" result="Error" success="False" time="123.269" asserts="33">
            <failure>
              <message><![CDATA[My MESSAGE ]]></message>
              <stack-trace>
                <![CDATA[Mystack trace]]>   
</stack-trace>
                </failure>
          </test-case>
        </results>
      </test-suite>
      <test-suite type="Namespace" name="PracticeCode" executed="True" result="Failure" success="False" time="0.017" asserts="0">
        <results>
          <test-suite type="Namespace" name="Basics" executed="True" result="Failure" success="False" time="0.016" asserts="0">
            <results>
              <test-suite type="TestFixture" name="PracticeCode_ArithmaticOperators" executed="True" result="Failure" success="False" time="0.016" asserts="0">
                <results>
                  <test-case name="AutomatedTests.PracticeCode.Basics.PracticeCode_ArithmaticOperators.PracticeCode_ArithmaticOperators_Main" executed="True" result="Success" success="True" time="0.015" asserts="0">                     
                    <failure>
                      <message>
                        <![CDATA[My MESSAGE]]>
                      </message>
                      <stack-trace>
                        <![CDATA[Mystack trace ]]>
                      </stack-trace>
                    </failure>
                  </test-case>
                </results>
              </test-suite>
            </results>
          </test-suite>
        </results>
      </test-suite>
      <test-suite type="Namespace" name="PracticeCode" executed="True" result="Success" success="True" time="0.013" asserts="0">
        <results>
          <test-suite type="Namespace" name="Basics" executed="True" result="Success" success="True" time="0.013" asserts="0">
            <results>
              <test-suite type="TestFixture" name="PracticeCode_ArithmaticOperators" executed="True" result="Success" success="True" time="0.012" asserts="0">
                <results>
                  <test-case name="AutomatedTests.PracticeCode.Basics.PracticeCode_ArithmaticOperators.PracticeCode_ArithmaticOperators_Main" executed="True" result="Success" success="True" time="0.011" asserts="0" />
                </results>
              </test-suite>
            </results>
          </test-suite>
        </results>
      </test-suite>
    </results>
  </test-suite>
</results>
</test-suite>
</test-results>

...and具有以下样式表

代码语言:javascript
复制
 <xsl:template match="/">
<html>
  <body>
    <!--If failures is greater than 0, display a failure summary-->
    <xsl:if test="/test-results/@errors>0 or /test-results/@failures>0">

      <!--Header for Fail Summary-->
      <span style="font-size:medium;">
        <br/>
        <h3>Failure/Message Summary</h3>
      </span>
      <br/>

      <!--Table for Failed/Errored Test Cases-->
      <table border="2" cellpadding="5" cellspacing="0">
        <tr bgcolor="#9acd32">
          <!--Specify the headers-->
          <th style="text-align:center">Test Case Name</th>
          <th style="text-align:center">Message</th>
        </tr>
        <xsl:for-each select="//test-case">
          <!--Sort table by test case name-->
          <xsl:sort select="@name"/>
          <tr>
            <td style="text-align:left">
              <xsl:value-of select="@name"/>
            </td>
            <td style="text-align:left">
              <span style="font-size:large; font-weight:bold; color:red;">
                Message =
              </span>
              <xsl:value-of select="failure/message"/>
              <br/>
              <br/>
              <span style="font-size:large; font-weight:bold; color:red;">
                StackTrace =
              </span>
              <xsl:value-of select="failure/stack-trace"/>
            </td>
          </tr>
        </xsl:for-each>
      </table>
      <br/>
    </xsl:if>
  </body>
</html>
 </xsl:template>

我正在尝试围绕这些NUnit结果构建一个表,因为表中包括了失败的测试,以及它们的消息和堆栈跟踪,但没有失败的测试被排除在表中。

目前,上面的样式表构建了这个表,但包含了所有通过或失败的测试。

如果有任何帮助我将不胜感激。请注意,我两天前才开始学习XSL,所以简单的解决方案会更好。

EN

回答 1

Stack Overflow用户

发布于 2014-10-08 21:45:13

找到以下答案作为我的问题的解决方案……

将表行包装在if语句中以计算'Success‘是否为false

代码语言:javascript
复制
 <!--Table for Failed/Errored Test Cases-->
      <table border="2" cellpadding="5" cellspacing="0">
        <tr bgcolor="#9acd32">
          <!--Specify the headers-->
          <th style="text-align:center">Test Case Name</th>
          <th style="text-align:center">Message</th>
        </tr>
        <!--Fore each test case, if Success = false, display the test name and message/stack trace-->         
        <xsl:for-each select="//test-case">
          <xsl:sort select="@name"/>
          <xsl:if test="./@success = 'False'">
          <!--Sort table by test case name-->        
          <tr>
            <td style="text-align:left">
              <xsl:value-of select="@name"/>
            </td>
            <td style="text-align:left">
              <span style="font-size:large; font-weight:bold; color:red;">
                Message =
              </span>
              <xsl:value-of select="failure/message"/>
              <br/>
              <br/>
              <span style="font-size:large; font-weight:bold; color:red;">
                StackTrace =
              </span>
              <xsl:value-of select="failure/stack-trace"/>
            </td>
          </tr>
          </xsl:if>
        </xsl:for-each>
      </table>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26257337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档