转换为xslt时获取最后一行值的xml

转换为xslt时获取最后一行值的xml,xml,xslt,Xml,Xslt,我有一个场景,我想要目标html文件中标记最后一行的值(passstatus、failstatus、errorstatus)等。我用last()方法尝试过这样做,但它对我不起作用,请帮助我解决问题。谢谢帮助 这是我的xml文件 <TestSuite> <TestCase> <name>checkLoginPage</name> <function> <method&g

我有一个场景,我想要目标html文件中标记最后一行的值(passstatus、failstatus、errorstatus)等。我用last()方法尝试过这样做,但它对我不起作用,请帮助我解决问题。谢谢帮助

这是我的xml文件

<TestSuite>
    <TestCase>
        <name>checkLoginPage</name>
        <function>
            <method>test</method>
            <status>ERROR</status>
            <reason>Traceback (most recent call last):</reason>
            <passstatus>0</passstatus>
            <failstatus>0</failstatus>
            <errorstatus>1</errorstatus>
            <method>test1</method>
            <status>FAIL</status>
            <reason>Traceback (most recent call last):</reason>
            <passstatus>0</passstatus>
            <failstatus>1</failstatus>
            <errorstatus>1</errorstatus>
        </function>
    </TestCase>
</TestSuite>

检查登录页
测试
错误
回溯(最近一次呼叫最后一次):
0
0
1.
测试1
失败
回溯(最近一次呼叫最后一次):
0
1.
1.
这是我的xslt文件

<table border="1" id="result_table">
    <tr bgcolor="#777">
        <th align="left">TestFile/TestCase</th>
        <th align="left">Pass</th>
        <th align="left">Fail</th>
        <th align="left">Error</th>
    </tr>
    <xsl:for-each select="/*/function">
        <xsl:if test="status='FAIL'">
            <tr bgcolor="#6c6">
                <td>
                    <xsl:value-of select="name"/>.
                    <xsl:value-of select="method"/>
                </td>
                <td>
                    <xsl:value-of select="/*[last()]/passstatus"/>
                </td>
                <td>
                    <xsl:value-of select="failstatus"/>
                </td>
                <td>
                    <xsl:value-of select="errorstatus"/>
                </td>
            </tr>
        </xsl:if>

TestFile/TestCase
通过
失败
错误
.
这是我希望从转换中得到的目标文件

<html xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org">
   <head>
      <style>
  td {
    border: 1px solid #777;
    padding: 2px;

}


</style>
   </head>
   <body>
      <table border="1" id="result_table">
         <tr bgcolor="#777">
            <th align="left">TestFile/TestCase</th>
            <th align="left">Pass</th>
            <th align="left">Fail</th>
            <th align="left">Error</th>
         </tr>
         <tr bgcolor="#6c6">
            <td>checkLoginPage.test2</td>
            <td>2</td>
            <td>1</td>
            <td>0</td>
         </tr>

      </table>
   </body>
</html>

运输署{
边框:1px实心#777;
填充:2px;
}
TestFile/TestCase
通过
失败
错误
checkLoginPage.test2
2.
1.
0

<>代码> < p>既然您已经接受了我的建议来更改XML格式,那么我们考虑一下这种形式的XML输入:

<TestSuite>
  <TestCase>
    <name>checkLoginPage</name>
    <function>
      <method>test</method>
      <status>ERROR</status>
      <reason>Traceback (most recent call last):</reason>
      <passstatus>0</passstatus>
      <failstatus>0</failstatus>
      <errorstatus>1</errorstatus>
    </function>
    <function>
      <method>test1</method>
      <status>FAIL</status>
      <reason>Traceback (most recent call last):</reason>
      <passstatus>0</passstatus>
      <failstatus>1</failstatus>
      <errorstatus>1</errorstatus>
    </function>
  </TestCase>
</TestSuite>
当应用于重新构造的输入(如本答案所示)时

<table border="1" id="result_table">
  <tr bgcolor="#777">
    <th align="left">TestFile/TestCase</th>
    <th align="left">Pass</th>
    <th align="left">Fail</th>
    <th align="left">Error</th>
  </tr>
  <tr bgcolor="#6c6">
    <td>checkLoginPage.test1</td>
    <td>0</td>
    <td>1</td>
    <td>1</td>
  </tr>
</table>

TestFile/TestCase
通过
失败
错误
checkLoginPage.test1
0
1.
1.

,这似乎是您想要的表单。

您的XML示例是否完整?在
TestCase
下只有一个
function
元素。应该有多个吗?(可能每个方法一个?)我还注意到XSLT正在检查
status='PASS'
,但是您的XML示例只有错误和失败。如果在本例中显示预期的输出,可能会有所帮助。谢谢。我为每个测试用例提供了一个函数,我已经编辑了状态,我已经在那里发布了xslt文件的一部分。函数中的passstatus,failstatus变量,保存了当前的pass,fail count,假设在函数中我有3个方法标记,2个passed和1个failed,那么passtatus是2,failedstatus是1。像wise一样,我希望代码中的最后一个值是2,1。您真的需要在这里使用
sum
?例如,
@Tim,而不是sum。我可以在函数中的最后一个标记中获得正确的值,但我的问题是如何在转换后的htmlIf中仅将最后一个stats值作为行值。如果您想要最后一个stats值,您可以执行
非常感谢@John。它工作得很好。我将更改该功能标签,对我来说,它看起来也很奇怪。:)
<table border="1" id="result_table">
  <tr bgcolor="#777">
    <th align="left">TestFile/TestCase</th>
    <th align="left">Pass</th>
    <th align="left">Fail</th>
    <th align="left">Error</th>
  </tr>
  <tr bgcolor="#6c6">
    <td>checkLoginPage.test1</td>
    <td>0</td>
    <td>1</td>
    <td>1</td>
  </tr>
</table>