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