Я пытаюсь вычислить минимальное и максимальное время для группы результатов JMeter из XML следующим образом, но когда я вызываю свой шаблон min с помощью ../httpSample[@lb = current()/@lb]/@t
, он не вычисляет время правильное.XSLT 1.0: Группирование и выбор времени для вычисления min
<httpSample t="758" lt="0" ts="1330176857546" s="false" lb="/app1/" tn="space Guest Users 2-4" dt="text" by="1446"/>
<httpSample t="213" lt="0" ts="1330176858088" s="false" lb="/app2/" tn="space Logged In Users 1-28" dt="text" by="1446"/>
<httpSample t="153" lt="0" ts="1330176858088" s="false" lb="/app2/" tn="space Logged In Users 1-28" dt="text" by="1446"/>
<httpSample t="113" lt="0" ts="1330176858088" s="false" lb="/app2/" tn="space Logged In Users 1-28" dt="text" by="1446"/>
<httpSample t="153" lt="0" ts="1330176858149" s="false" lb="/app3/" tn="space Logged In Users 1-29" dt="text" by="1446"/>
<httpSample t="340" lt="0" ts="1330176857967" s="false" lb="/app3/" tn="space Logged In Users 1-26" dt="text" by="1446"/>
Выражение в xsl:message
../httpSample[@lb = current()/@lb]
работает корректно с точки зрения группировки, но он не выбирает атрибут времени правильно.
Большое спасибо заранее.
<xsl:for-each select="/testResults/httpSample[not(@lb = preceding::*/@lb)]">
<xsl:variable name="lab" select="@lb" />
<xsl:variable name="count" select="count(../httpSample[@lb = current()/@lb])" />
<xsl:variable name="failureCount" select="count(../httpSample[@lb = current()/@lb][attribute::s='false'])" />
<xsl:variable name="successCount" select="count(../httpSample[@lb = current()/@lb][attribute::s='true'])" />
<xsl:variable name="successPercent" select="$successCount div $count" />
<xsl:variable name="totalTime" select="sum(../httpSample[@lb = current()/@lb]/@t)" />
<xsl:variable name="averageTime" select="$totalTime div $count" />
<xsl:message>
times: <xsl:copy-of select="../httpSample[@lb = current()/@lb]/@t"/>
</xsl:message>
<xsl:variable name="minTime">
<xsl:call-template name="min">
<xsl:with-param name="nodes" select="../httpSample[@lb = current()/@lb]/@t" />
</xsl:call-template>
</xsl:variable>
...
<xsl:template name="min">
<xsl:param name="nodes" select="/.." />
<!-- Broken when we get here -->
<xsl:choose>
<xsl:when test="not($nodes)">NaN</xsl:when>
<xsl:otherwise>
<xsl:for-each select="$nodes">
<xsl:sort data-type="number" />
<xsl:if test="position() = 1">
<xsl:value-of select="number(.)" />
</xsl:if>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:template>