xsl:call-template是什么意思 ?

qozm 2003-08-19 10:16:13
请教xsl 的三个元素是什么意思?

1、用 xsl:call-template 调用模板,具体用法是什么?
2、xsl:param 和 xsl:set-param 的用法是什么?

最好结合实例讲解,或者提供讲解详细的网址!
...全文
1429 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
saucer 2003-08-19
  • 打赏
  • 举报
回复
you can call or apply another template, see an example:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/htm/xsl_elm_qz_1f5g.asp

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- These 2 elements effectively assign
$messages = resources/en.xml/<messages>,
then $messages is used in the "localized-message" template. -->
<xsl:param name="lang">en</xsl:param>
<xsl:variable name="messages"
select="document(concat('resources/', $lang, '.xml'))/messages"/>

<xsl:template name="msg23" match="msg23">
<xsl:call-template name="localized-message">
<xsl:with-param name="msgcode">msg23</xsl:with-param>
</xsl:call-template>
</xsl:template>

<xsl:template name="localized-message">
<xsl:param name="msgcode"/>
<!-- Show message string. -->
<xsl:message terminate="yes">
<xsl:value-of select="$messages/message[@name=$msgcode]"/>
</xsl:message>
</xsl:template>

</xsl:stylesheet>
eclipse-testng 离线包 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:math="http://exslt.org/math" xmlns:testng="http://testng.org"> <xsl:output method="html" indent="yes" omit-xml-declaration="yes" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> <xsl:output name="text" method="text"/> <xsl:output name="xml" method="xml" indent="yes"/> <xsl:output name="html" method="html" indent="yes" omit-xml- declaration="yes"/> <xsl:output name="xhtml" method="xhtml" indent="yes" omit-xml-declaration="yes"/> <xsl:param name="testNgXslt.outputDir"/> <xsl:param name="testNgXslt.cssFile"/> <xsl:param name="testNgXslt.showRuntimeTotals"/> <xsl:param name="testNgXslt.reportTitle"/> <xsl:param name="testNgXslt.sortTestCaseLinks"/> <xsl:param name="testNgXslt.chartScaleFactor"/> <xsl:param name="testNgXslt.testDetailsFilter"/> <xsl:variable name="testDetailsFilter" select="if ($testNgXslt.testDetailsFilter) then $testNgXslt.testDetailsFilter else 'FAIL,PASS,SKIP'"/> <xsl:variable name="chartWidth" select="round(600 * testng:getVariableSafe($testNgXslt.chartScaleFactor, 1))"/> <xsl:variable name="chartHeight" select="round(200 * testng:getVariableSafe($testNgXslt.chartScaleFactor, 1))"/> <xsl:template name="writeCssFile"> <xsl:result- document href="{testng:absolutePath('style.css')}" format="text"> <xsl:choose> <xsl:when test="testng:isFilterSelected('CONF') = 'true'"> .testMethodStatusCONF { } xsl:when> <xsl:otherwise> .testMethodStatusCONF { display: none; } xsl:otherwise> xsl:choose> <xsl:choose> <xsl:when test="testng:isFilterSelected('FAIL') = 'true'"> .testMethodStatusFAIL { background-color: #FFBBBB; } xsl:when> <xsl:otherwise> .testMethodStatusFAIL { background-color: #FFBBBB; display: none; } xsl:otherwise> xsl:choose> <xsl:choose> <xsl:when test="testng:isFilterSelected ('PASS') = 'true'"> .testMethodStatusPASS { background-color: lightgreen; } xsl:when> <xsl:otherwise> .testMethodStatusPASS { background-color: lightgreen; display: none; } xsl:otherwise> xsl:choose> <xsl:choose> <xsl:when test="testng:isFilterSelected('SKIP') = 'true'"> .testMethodStatusSKIP { background-color: #FFFFBB; } xsl:when> <xsl:otherwise> .testMethodStatusSKIP { background-color: #FFFFBB; display: none; } xsl:otherwise> xsl:choose> xsl:result-document> xsl:template> <xsl:template name="writeJsFile"> <xsl:result-document href="{testng:absolutePath('main.js')}" format="text"> -1) { document.styleSheets[i][rules][j].style[element] = value; break; } } } } function closeAllExpandedDetails() { var node = document.getElementsByTagName("body")[0]; //var re = new RegExp("\ \btestMethodDetailsVisible\\b"); var els = document.getElementsByTagName("div"); for (var i = 0,j = els.length; i < j; i++) { if (els[i].className == "testMethodDetailsVisible") { els[i].className = "testMethodDetails"; } } } function renderSvgEmbedTag(chartWidth, chartHeight) { var success = false; var userAgent = navigator.userAgent; if (userAgent.indexOf("Firefox") > -1 || userAgent.indexOf("Safari") > -1) { success = true; } else if (navigator.mimeTypes != null && navigator.mimeTypes.length > 0) { if (navigator.mimeTypes["image/svg+xml"] != null) { success = true; } } else if (window.ActiveXObject) { try { testObj = new ActiveXObject("Adobe.SVGCtl"); success = true; } catch (e) {} } var chartContainer = document.getElementById('chart-container'); if (success) { var chart = document.createElement('embed'); chart.src = 'overview-chart.svg'; chart.type = 'image/svg+xml'; chart.width = chartWidth; chart.height = chartHeight; chartContainer.appendChild(chart); } else { var message = document.createElement('h4'); var text = document.createTextNode('SVG Pie Charts are not available. Please install a SVG viewer for your browser.'); message.style.color = 'navy'; message.appendChild(text); chartContainer.appendChild(message); } } ]]> xsl:result- document> xsl:template> <xsl:template name="htmlHead"> <<em>xsl</em>:value- of select="testng:getVariableSafe($testNg<em>Xsl</em>t.reportTitle, 'TestNG Results')"/> <xsl:if test="$testNgXslt.cssFile"> xsl:if> <script type="text/javascript" src="main.js"/> xsl:template> <xsl:function name="testng:getVariableSafe"> <xsl:param name="testVar"/> <xsl:param name="defaultValue"/> <xsl:value-of select="if ($testVar) then $testVar else $defaultValue"/> xsl:function> <xsl:function name="testng:trim"> <xsl:param name="arg"/> <xsl:sequence select="replace(replace($arg,'\s+$',''),'^\s +','')"/> xsl:function> <xsl:function name="testng:absolutePath"> <xsl:param name="fileName"/> <xsl:value-of select="concat('file:////', $testNgXslt.outputDir, '/', $fileName)"/> xsl:function> <xsl:function name="testng:safeFileName"> <xsl:param name="fileName"/> <xsl:value-of select="translate($fileName, '[]{}`~! @#$%^*(){};?/\|' , '______________________')"/> xsl:function> <xsl:function name="testng:suiteContentFileName"> <xsl:param name="suiteElement"/> <xsl:value-of select="testng:safeFileName(concat($suiteElement/@name, '.html'))"/> xsl:function> <xsl:function name="testng:suiteGroupsFileName"> <xsl:param name="suiteElement"/> <xsl:value-of select="testng:safeFileName(concat($suiteElement/@name, '_groups.html'))"/> xsl:function> <xsl:function name="testng:testCaseContentFileName"> <xsl:param name="testCaseElement"/> <xsl:value-of select="testng:safeFileName(concat($testCaseElement/../@name, '_', $testCaseElement/@name, '.html'))"/> xsl:function> <xsl:function name="testng:concatParams"> <xsl:param name="params"/> <xsl:variable name="outputString"> <xsl:value-of separator="," select="for $i in ($params) return $i"/> xsl:variable> <xsl:value-of select="$outputString"/> xsl:function> <xsl:function name="testng:testMethodStatus"> <xsl:param name="testMethodElement"/> <xsl:variable name="status" select="$testMethodElement/@status"/> <xsl:variable name="statusClass" select="concat('testMethodStatus', $status)"/> <xsl:value-of select="if ($testMethodElement/@is-config) then concat($statusClass, ' testMethodStatusCONF') else $statusClass"/> xsl:function> <xsl:function name="testng:suiteMethodsCount"> <xsl:param name="testCasesElements"/> <xsl:param name="state"/> <xsl:value-of select="if ($state = '*') then count($testCasesElements/class/test- method[not(@is-config)]) else count($testCasesElements/class/test-method[(@status=$state) and (not(@is-config))])"/> xsl:function> <xsl:function name="testng:testCaseMethodsCount"> <xsl:param name="testCaseElement"/> <xsl:param name="state"/> <xsl:value-of select="if ($state = '*') then count ($testCaseElement/class/test-method[not(@is-config)]) else count($testCaseElement/class/test-method[(@status=$state) and (not(@is-config))])"/> xsl:function> <xsl:function name="testng:suiteStateClass"> <xsl:param name="testCaseElements"/> <xsl:value-of select="if (count($testCaseElements/class/test-method[(@status='FAIL') and (not(@is-config))]) > 0) then 'suiteStatusFail' else 'suiteStatusPass'"/> xsl:function> <xsl:function name="testng:methodsDuration"> <xsl:param name="testMethods"/> <xsl:variable name="durationMs" select="sum ($testMethods/@duration-ms)"/> <xsl:value-of select="testng:formatDuration($durationMs)"/> xsl:function> <xsl:function name="testng:formatDuration"> <xsl:param name="durationMs"/> <xsl:if test="$durationMs > 86400000"> <xsl:value-of select="format-number($durationMs div 86400000, '#')"/>d xsl:if> <xsl:if test="($durationMs > 3600000) and ($durationMs mod 86400000 > 1000)"> <xsl:value-of select="format-number(($durationMs mod 86400000) div 3600000, '#')"/>h xsl:if> <xsl:if test="$durationMs < 86400000"> <xsl:if test="($durationMs > 60000) and ($durationMs mod 3600000 > 1000)"> <xsl:value-of select="format-number(($durationMs mod 3600000) div 60000, '#')"/>m xsl:if> <xsl:if test="($durationMs > 1000) and ($durationMs mod 60000 > 1000)"> <xsl:value-of select="format-number(($durationMs mod 60000) div 1000, '#')"/>s xsl:if> xsl:if> <xsl:if test="$durationMs < 1000"> <xsl:value-of select="$durationMs"/> ms xsl:if> xsl:function> <xsl:function name="testng:isFilterSelected"> <xsl:param name="filterName"/> <xsl:value-of select="contains ($testDetailsFilter, $filterName)"/> xsl:function> <xsl:template name="formField"> <xsl:param name="label"/> <xsl:param name="value"/> <xsl:if test="$value">
<xsl:value-of select="$label"/>: <xsl:value-of select="$value"/>
xsl:if> xsl:template> <xsl:template name="formFieldList"> <xsl:param name="label"/> <xsl:param name="value"/> <xsl:if test="count($value) > 0">
<xsl:value- of select="$label"/>: <xsl:for-each select="$value">
    - <xsl:value-of select="."/>
xsl:for-each>
xsl:if> xsl:template> <xsl:template match="/testng-results"> <xsl:call-template name="writeCssFile"/> <xsl:call-template name="writeJsFile"/> <xsl:call-template name="htmlHead"/> <xsl:variable name="suiteElements" select="if (suite/@url) then document(suite/@url)/suite else suite"/> <xsl:call-template name="navigationFile"> <xsl:with-param name="suiteElements" select="$suiteElements"/> <xsl:with-param name="reporterOutputElement" select="reporter-output"/> xsl:call-template> <xsl:result-document href="{testng:absolutePath('overview- chart.svg')}" format="xml"> <xsl:variable name="testCaseElements" select=" if (suite/@url) then if (document (suite/@url)/suite/test/@url) then document(document(suite/@url)/suite/test/@url)/test else document(suite/@url)/suite/test else suite/test"/> <xsl:variable name="failedCount" select="testng:suiteMethodsCount($testCaseElements, 'FAIL')"/> <xsl:variable name="passedCount" select="testng:suiteMethodsCount($testCaseElements, 'PASS')"/> <xsl:variable name="skippedCount" select="testng:suiteMethodsCount($testCaseElements, 'SKIP')"/> <xsl:variable name="totalCount" select="testng:suiteMethodsCount($testCaseElements, '*')"/> <xsl:variable name="pi" select="3.141592"/> <xsl:variable name="radius" select="130"/> <xsl:variable name="failedPercent" select="format-number($failedCount div $totalCount, '###%')"/> <xsl:variable name="failedAngle" select="($failedCount div $totalCount) * $pi * 2"/> <xsl:variable name="failedX" select="$radius * math:cos($failedAngle)"/> <xsl:variable name="failedY" select="-1 * $radius * math:sin($failedAngle)"/> <xsl:variable name="failedArc" select="if ($failedAngle >= $pi) then 1 else 0"/> <xsl:variable name="failedAngle_text" select="$failedAngle div 2"/> <xsl:variable name="failedX_text" select="($radius div 2) * math:cos($failedAngle_text)"/> <xsl:variable name="failedY_text" select="(-1 * ($radius div 2) * math:sin($failedAngle_text))"/> <xsl:variable name="passPercent" select="format-number($passedCount div $totalCount, '###%')"/> <xsl:variable name="passAngle" select="($passedCount div $totalCount) * $pi * 2"/> <xsl:variable name="passX" select="$radius * math:cos($passAngle)"/> <xsl:variable name="passY" select="-1 * $radius * math:sin ($passAngle)"/> <xsl:variable name="passArc" select="if ($passAngle >= $pi) then 1 else 0"/> <xsl:variable name="skipPercent" select="format-number($skippedCount div $totalCount, '###%')"/> <xsl:variable name="skipAngle" select="($skippedCount div $totalCount) * $pi * 2"/> <xsl:variable name="skipX" select="$radius * math:cos($skipAngle)"/> <xsl:variable name="skipY" select="-1 * $radius * math:sin($skipAngle)"/> <xsl:variable name="skipArc" select="if ($skipAngle >= $pi) then 1 else 0"/> Failed (<xsl:value-of select="$failedPercent"/>) Passed (<xsl:value-of select="$passPercent"/>) Skipped (<xsl:value-of select="$skipPercent"/>) <xsl:variable name="failedRotation" select="(($skippedCount) div $totalCount) * 360"/> <xsl:if test="($failedCount div $totalCount) > 0"> xsl:if> <xsl:variable name="passRotation" select="(($failedCount + $skippedCount) div $totalCount) * 360"/> <xsl:if test="($passedCount div $totalCount) > 0"> xsl:if> <xsl:if test="($skippedCount div $totalCount) > 0"> xsl:if> xsl:result-document> <xsl:result-document href="{testng:absolutePath('overview.html')}" format="xhtml"> <xsl:call-template name="htmlHead"/>

Test suites overview

<script type="text/javascript"> renderSvgEmbedTag(<xsl:value-of select="$chartWidth"/>, <xsl:value-of select="$chartHeight"/>);
<xsl:for-each select="$suiteElements"> <xsl:variable name="testCaseElements" select="if (test/@url) then document(test/@url)/test else test"/> <xsl:call-template name="percentageOverview"> <xsl:with-param name="failedCount" select="testng:suiteMethodsCount($testCaseElements, 'FAIL')"/> <xsl:with-param name="passedCount" select="testng:suiteMethodsCount ($testCaseElements, 'PASS')"/> <xsl:with-param name="skippedCount" select="testng:suiteMethodsCount($testCaseElements, 'SKIP')"/> <xsl:with-param name="totalCount" select="testng:suiteMethodsCount ($testCaseElements, '*')"/> <xsl:with-param name="totalDuration" select="testng:methodsDuration($testCaseElements/class/test-method)"/> xsl:call-template> <xsl:for-each select="$testCaseElements"> <xsl:if test="compare($testNgXslt.showRuntimeTotals, 'true') = 0"> xsl:if> xsl:for-each>
<xsl:value-of select="@name"/>
<xsl:value-of select="@name"/> <xsl:value-of select="testng:testCaseMethodsCount(., 'FAIL')"/> <xsl:value-of select="testng:testCaseMethodsCount(., 'PASS')"/> <xsl:value-of select="testng:testCaseMethodsCount(., 'SKIP')"/> <xsl:value-of select="testng:testCaseMethodsCount(., '*')"/> <xsl:value-of select="if (testng:testCaseMethodsCount(., '*') > 0) then format-number(testng:testCaseMethodsCount(., 'PASS') div testng:testCaseMethodsCount(., '*'), '###%') else '100%'"/> <xsl:value-of select="testng:methodsDuration(./class/test-method)"/>

xsl:for-each> <xsl:call- template name="powered-by"/> xsl:result-document> <xsl:result-document href="{testng:absolutePath('reporterOutput.html')}" format="xhtml"> <xsl:call-template name="htmlHead"/>

Reporter output

<xsl:for-each select="reporter-output/line">
<xsl:value-of select="."/>
xsl:for-each> <xsl:call-template name="powered-by"/> xsl:result-document> xsl:template> <xsl:template name="navigationFile"> <xsl:param name="suiteElements"/> <xsl:param name="reporterOutputElement"/> <xsl:result-document href="{testng:absolutePath('navigation.html')}" format="xhtml"> <xsl:call-template name="htmlHead"/>

<xsl:value-of select="testng:getVariableSafe($testNgXslt.reportTitle, 'TestNG Results')"/>

<xsl:for-each select="$suiteElements"> <xsl:variable name="testCaseElements" select="if (test/@url) then document(test/@url)/test else test"/>
<xsl:value-of select="@name"/> <xsl:value-of select="testng:suiteMethodsCount($testCaseElements, 'FAIL')"/> / <xsl:value-of select="testng:suiteMethodsCount ($testCaseElements, 'PASS')"/> / <xsl:value-of select="testng:suiteMethodsCount($testCaseElements, 'SKIP')"/> / <xsl:value-of select="testng:suiteMethodsCount($testCaseElements, '*')"/> <xsl:value-of select="format-number (testng:suiteMethodsCount($testCaseElements, 'PASS') div testng:suiteMethodsCount($testCaseElements, '*'), '###%')"/>
<xsl:call-template name="suiteContentFile"> <xsl:with-param name="suiteElement" select="."/> xsl:call-template> <xsl:call-template name="suiteGroupsFile"> <xsl:with-param name="suiteElement" select="."/> xsl:call-template> <xsl:call-template name="suiteTestCasesLinks"> <xsl:with-param name="testCases" select="$testCaseElements"/> xsl:call-template> <xsl:call-template name="suiteTestCasesContentFiles"> <xsl:with-param name="testCases" select="$testCaseElements"/> xsl:call-template> xsl:for-each>
xsl:result-document> xsl:template> <xsl:template name="suiteContentFile"> <xsl:param name="suiteElement"/> <xsl:variable name="testCaseElements" select="if (test/@url) then document(test/@url)/test else test"/> <xsl:result-document href="{testng:absolutePath(testng:suiteContentFileName($suiteElement))}" format="xhtml"> <xsl:call-template name="htmlHead"/> <xsl:call-template name="percentageOverview"> <xsl:with-param name="failedCount" select="testng:suiteMethodsCount($testCaseElements, 'FAIL')"/> <xsl:with-param name="passedCount" select="testng:suiteMethodsCount ($testCaseElements, 'PASS')"/> <xsl:with-param name="skippedCount" select="testng:suiteMethodsCount($testCaseElements, 'SKIP')"/> <xsl:with-param name="totalCount" select="testng:suiteMethodsCount ($testCaseElements, '*')"/> <xsl:with-param name="totalDuration" select="testng:methodsDuration($testCaseElements/class/test-method)"/> xsl:call-template>
All methods in suite <xsl:value-of select="./@name"/>
<xsl:call-template name="testMethods"> <xsl:with-param name="classes" select="$testCaseElements/class"/> <xsl:with-param name="failedMethods" select="$testCaseElements/class/test-method[@status='FAIL']"/> <xsl:with-param name="passedMethods" select="$testCaseElements/class/test-method[@status='PASS']"/> <xsl:with-param name="skipedMethods" select="$testCaseElements/class/test-method[@status='SKIP']"/> xsl:call-template> <xsl:call-template name="powered-by"/> xsl:result-document> xsl:template> <xsl:template name="suiteGroupsFile"> <xsl:param name="suiteElement"/> <xsl:result-document href="{testng:absolutePath(testng:suiteGroupsFileName($suiteElement))}" format="xhtml"> <xsl:call-template name="htmlHead"/>

Groups for suite: <xsl:value-of select="$suiteElement/@name"/>

<xsl:for-each select="$suiteElement/groups/group"> <xsl:sort order="ascending" select="@name"/> <xsl:for-each select="method"> xsl:for-each>
<xsl:value-of select="./@name"/>
<xsl:value-of select="@signature"/>
xsl:for-each> <xsl:call-template name="powered-by"/> xsl:result-document> xsl:template> <xsl:template name="testMethods"> <xsl:param name="classes"/> <xsl:param name="failedMethods"/> <xsl:param name="passedMethods"/> <xsl:param name="skipedMethods"/> <xsl:param name="filePrefix"/>


<xsl:if test="testng:isFilterSelected('BY_CLASS') = 'true'"> <xsl:attribute name="style" select="'display: none;'"/> xsl:if> <xsl:call-template name="testMethodsList"> <xsl:with-param name="methodList" select="$failedMethods"/> <xsl:with-param name="category" select="'byStatus_failed'"/> xsl:call-template> <xsl:call-template name="testMethodsList"> <xsl:with-param name="methodList" select="$passedMethods"/> <xsl:with-param name="category" select="'byStatus_passed'"/> xsl:call-template> <xsl:call-template name="testMethodsList"> <xsl:with-param name="methodList" select="$skipedMethods"/> <xsl:with-param name="category" select="'byStatus_skiped'"/> xsl:call-template>
Name Started Duration Exception
<xsl:if test="testng:isFilterSelected('BY_CLASS') != 'true'"> <xsl:attribute name="style" select="'display: none;'"/> xsl:if> <xsl:for-each select="$classes"> <xsl:sort order="ascending" select="@name"/> <xsl:call-template name="testMethodsList"> <xsl:with- param name="methodList" select="./test-method"/> <xsl:with-param name="category" select="'byClass'"/> <xsl:with-param name="sortByStartTime" select="'true'"/> xsl:call-template>

<xsl:value-of select="./@name"/>

Name Started Duration Exception

xsl:for-each>
xsl:template> <xsl:template name="testMethodsList"> <xsl:param name="methodList"/> <xsl:param name="category"/> <xsl:param name="sortByStartTime"/> <xsl:for-each select="$methodList"> <xsl:sort order="ascending" select="if (compare($sortByStartTime, 'true') = 0) then @started-at else ''"/> <xsl:variable name="methodId" select="concat(../@name, '_', @name, '_', $category, '_', @status, position())"/> <xsl:variable name="detailsId" select="concat($methodId, '_details')"/> <xsl:variable name="exceptionDetailsId" select="concat($methodId, '_exception')"/> <xsl:if test="testng:isFilterSelected(@status) != 'true'"> xsl:if> <xsl:value-of select="concat(@name, '(', testng:trim(testng:concatParams(./params/param)), ')')"/> <xsl:value-of select="substring(@started-at, 12, 8)"/> <xsl:value-of select="testng:formatDuration(@duration-ms)"/> <xsl:if test="./exception"> <xsl:value-of select="concat(exception/@class, ': ', exception/message)"/> xsl:if>  
<xsl:call-template name="formField"> <xsl:with-param name="label" select="'Name'"/> <xsl:with-param name="value" select="@name"/> xsl:call-template> <xsl:call-template name="formField"> <xsl:with-param name="label" select="'Description'"/> <xsl:with-param name="value" select="@description"/> xsl:call-template> <xsl:call-template name="formField"> <xsl:with-param name="label" select="'Signature'"/> <xsl:with-param name="value" select="@signature"/> xsl:call-template> <xsl:if test="./params"> <xsl:call-template name="formField"> <xsl:with-param name="label" select="'Parameters'"/> <xsl:with-param name="value" select="testng:concatParams(./params/param)"/> xsl:call- template> xsl:if> <xsl:call-template name="formField"> <xsl:with-param name="label" select="'Start time'"/> <xsl:with-param name="value" select="substring(@started-at, 12, 8)"/> xsl:call-template> <xsl:call- template name="formField"> <xsl:with-param name="label" select="'End time'"/> <xsl:with-param name="value" select="substring(@finished-at, 12, 8)"/> xsl:call-template> <xsl:call-template name="formField"> <xsl:with-param name="label" select="'Duration'"/> <xsl:with-param name="value" select="testng:formatDuration(@duration- ms)"/> xsl:call-template> <xsl:call-template name="formField"> <xsl:with-param name="label" select="'In groups:'"/> <xsl:with-param name="value" select="@groups"/> xsl:call-template> <xsl:if test="@depends-on-methods"> <xsl:call-template name="formFieldList"> <xsl:with-param name="label" select="'Depends on methods'"/> <xsl:with-param name="value" select="tokenize(@depends-on-methods, ',')"/> xsl:call-template> xsl:if> <xsl:if test="@depends-on-groups"> <xsl:call-template name="formFieldList"> <xsl:with-param name="label" select="'Depends on groups'"/> <xsl:with-param name="value" select="tokenize(@depends-on-groups, ',')"/> xsl:call-template> xsl:if>
<xsl:if test="exception">
<xsl:choose> <xsl:when test="exception/full-stacktrace">
                                        <xsl:value-of select="testng:trim

(exception/full-stacktrace)"/>
                                    
xsl:when> <xsl:when test="exception/short-stacktrace and not (exception/full-stacktrace)">
                                        <xsl:value-of 

select="testng:trim(exception/short-stacktrace)"/>
                                    
xsl:when> <xsl:otherwise>
<No stacktrace information>
xsl:otherwise> xsl:choose>
xsl:if> xsl:for-each> xsl:template> <xsl:template name="suiteTestCasesLinks"> <xsl:param name="testCases"/> <xsl:for-each select="$testCases"> <xsl:sort order="ascending" select="if (compare ($testNgXslt.sortTestCaseLinks, 'true') = 0) then @name else ''"/> xsl:for- each> xsl:template> <xsl:template name="suiteTestCasesContentFiles"> <xsl:param name="testCases"/> <xsl:for-each select="$testCases"> <xsl:result-document href="{testng:absolutePath (testng:testCaseContentFileName(.))}" format="xhtml"> <xsl:call-template name="htmlHead"/> <xsl:call-template name="percentageOverview"> <xsl:with-param name="failedCount" select="testng:testCaseMethodsCount(., 'FAIL')"/> <xsl:with-param name="passedCount" select="testng:testCaseMethodsCount(., 'PASS')"/> <xsl:with-param name="skippedCount" select="testng:testCaseMethodsCount(., 'SKIP')"/> <xsl:with-param name="totalCount" select="testng:testCaseMethodsCount(., '*')"/> <xsl:with-param name="totalDuration" select="testng:methodsDuration(./class/test-method)"/> xsl:call-template>
Test case <xsl:value-of select="./@name"/>
<xsl:call-template name="testMethods"> <xsl:with-param name="classes" select="./class"/> <xsl:with-param name="failedMethods" select="./class/test-method[@status='FAIL']"/> <xsl:with-param name="passedMethods" select="./class/test-method[@status='PASS']"/> <xsl:with-param name="skipedMethods" select="./class/test-method[@status='SKIP']"/> xsl:call-template> <xsl:call-template name="powered-by"/> xsl:result-document> xsl:for-each> xsl:template> <xsl:template name="percentageOverview"> <xsl:param name="failedCount"/> <xsl:param name="passedCount"/> <xsl:param name="skippedCount"/> <xsl:param name="totalCount"/> <xsl:param name="totalDuration"/>
<xsl:value-of select="$failedCount"/>
<xsl:value-of select="$passedCount"/>
<xsl:value-of select="$skippedCount"/>
<xsl:value-of select="$totalCount"/>
<xsl:value-of select="if ($totalCount > 0) then format-number($passedCount div $totalCount, '###%') else '100%'"/>
<xsl:if test="compare($testNgXslt.showRuntimeTotals, 'true') = 0"> <xsl:value-of select="$totalDuration"/> xsl:if> xsl:template> <xsl:template name="powered-by">
Generated with TestNG XSLT
xsl:template> xsl:stylesheet>

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧