Carsten: große Probleme mit substring() und Vergleiche

Beitrag lesen

Hallo,

ich habe ein großes Problem. Damit ich das Problem erläutern kann, poste ich einmal mei xml Files, eine XSLT Anweisung und das HTML Ergebnis. Vielleicht findet ja jemand eine Lösung.

Ich habe folgende xml Seite:

<testResults>

<sampleResult timeStamp="23.04.2004 11:24:41" dataType="text" threadName="Testszenario 1-1" label="User1 Start"  success="true">
 <assertionResult failureMessage="" error="false" failure="false"/>
 <assertionResult failureMessage="" error="false" failure="false"/>
</sampleResult>
<sampleResult timeStamp="23.04.2004 11:24:41" dataType="text" threadName="Testszenario 1-1" label="User1  Login"  success="true">
 <assertionResult failureMessage="" error="false" failure="false"/>
</sampleResult>
<sampleResult timeStamp="23.04.2004 11:24:44" dataType="text" threadName="Testszenario 1-2" label="User2 Start"  success="true">
 <assertionResult failureMessage="" error="false" failure="false"/>
 <assertionResult failureMessage="" error="false" failure="false"/>
</sampleResult>
<sampleResult timeStamp="23.04.2004 11:24:44" dataType="text" threadName="Testszenario 1-2" label="User2  Login"  success="true">
 <assertionResult failureMessage="" error="false" failure="false"/>
</sampleResult>
<sampleResult timeStamp="23.04.2004 11:24:41" dataType="text" threadName="Testszenario 1-1" label="User1  Aktion1"  success="true">
 <assertionResult failureMessage="" error="false" failure="false"/>
 <assertionResult failureMessage="" error="false" failure="false"/>
</sampleResult>
<sampleResult timeStamp="23.04.2004 11:24:45" dataType="text" threadName="Testszenario 1-1" label="User1 Aktion2"  success="true">
 <assertionResult failureMessage="" error="false" failure="false"/>
 <assertionResult failureMessage="" error="false" failure="false"/>
</sampleResult>
<sampleResult timeStamp="23.04.2004 11:24:45" dataType="text" threadName="Testszenario 1-1" label="User1 Aktion3"  success="false">
 <assertionResult failureMessage="" error="false" failure="false"/>
 <assertionResult failureMessage="Test failed, text expected not to contain /true/" error="false" failure="false"/>
</sampleResult>
<sampleResult timeStamp="23.04.2004 11:24:47" dataType="text" threadName="Testszenario 1-2" label="User2 Aktion1"  success="true">
 <assertionResult failureMessage="" error="false" failure="false"/>
</sampleResult>
<sampleResult timeStamp="23.04.2004 11:24:47" dataType="text" threadName="Testszenario 1-2" label="User2 Aktion2"  success="false">
 <assertionResult failureMessage="" error="false" failure="false"/>
 <assertionResult failureMessage="Test failed, text expected not to contain /true/" error="false" failure="true"/>
</sampleResult>
</testResults>

Nun habe ich das Problem, dass ich die User mir mittels der substring Funktion herausziehe und in eine html Tabelle lege. Aber, egal wie ich es mache, ich bekomme leider nicht nur einmal User1 und USer2 sondern, oftmals halt so, wie sie in den labels stehen (User1, User1, User2, User2). Dann habe ich durch einen "threadName" Vergleich es wenigstens so geschafft, dass nur pro threadName die User ausgegeben werden. Ich möchte aber generell, beim ersten Vorkommen eines Users ihn ausgeben und danach nicht noch einmal, so dass ich eine Tabelle erhalte, die nur die benutzten User enthält.

Meine momentane xslt Anweisung so so aus:

<xsl:template name="user">
 <h1>Benutzte User</h1>
 <xsl:variable name="label" select="@label" />
 <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
  <tr valign="top">
   <th> User </th>
  </tr>

<xsl:for-each select="/testResults/sampleResult[not(@label = preceding::*/@label)]">
   <xsl:variable name="user" select="substring(@label,1,6)" />
   <xsl:if test="@threadName= preceding::*/@threadName">
    <xsl:variable name="user2" select="substring(@label,1,6)" />
    <td><xsl:value-of select="substring(@label,1,6)" /></td>
   </xsl:if>
  </xsl:for-each>
 </table>
</xsl:template>

Das Ergebnis schaut dann so aus:
<h1>Benutzte User</h1>
<table width="95%" cellspacing="2" cellpadding="5" border="0" class="details">
<tr valign="top">
<th> User </th>
</tr>
<td>User1 </td><td>User2 </td><td>User1 </td><td>User1 </td><td>User1 </td><td>User2 </td><td>User2 </td>
</table>

Ich hoffe mir kann jemand helfen, dieses Probelm zu lösen.

Vielen Dank.
Gruß,
Carsten