Zugriff auf Elemente gleicher Ebene
Carsten
- xsl
0 gant0 Carsten0 Thomas J.S.0 Carsten
Hallo zusammen!!
Ich habe folgende XML Datei:
<?xml version="1.0" encoding="UTF-8"?>
<testResults>
<sampleResult timeStamp="23.04.2004 11:26:49" dataType="text" threadName="Testszenario Statistik1-2" label="XXXX Refresh: XXXXXXXXXXXXXXXXXXXXXX" time="290" responseMessage="OK" responseCode="200" success="false">
<property xml:space="preserve" name="samplerData">POST http://xxxxxxxxxxxxxxxxxxxxx/jsessionid=00BCKNSjJ6:-1 Query data: xxxxxx</property>
<assertionResult failureMessage="1 fehler" error="false" failure="false" /><assertionResult failureMessage="Test failed, text expected not to contain /Statistik/" error="false" failure="true" />
<assertionResult failureMessage="Text fehlt" error="false" failure="false" />
</sampleResult>
</testResults>
Von diesen Blöcken ganz viele. Nun lasse ich ein xslt Script dort drüber laufen, dass mir eine Auswertung in HTML liefert. Nun möchte ich aber auch die failureMessage jedesmal mit in einer Tabelle ausgeben. Wie hangel ich mich durch jedes <assertionResult> Element?
Folgender Vorschlag:
<xsl:variable name="responseMessage" select="@responseMessage"/>
<td>
<xsl:value-of select="$failureMessage"/>
</td>
vor diesen Anweisungen hatte ich eine for-ech Schleife über alle Labels. Leider bekomme ich so immer nur zu jedem Label die erste failureMessage und nicht die anderen noch.
Vielen Dank für die Hilfe.
Gruß,
Carsten
PS: Wenn jemand die xml datei erkennt, sie wird vom jmeter generiert.
salut
dafür gibts das xsl:for-each konstrukt.
zufinden in selfhtml.
grüsse
gant
Hmm, hilft mir nicht wirklich.
Vielleicht ist es so anschaulicher:
<?xml version="1.0" encoding="UTF-8"?>
<testResults>
<sampleResult timeStamp="23.04.2004 11:26:49" threadName="Testszenario" label="Refresh success="false">
<assertionResult failureMessage="blubig" />
<assertionResult failureMessage="Test failed"/>
<assertionResult failureMessage=""/>
</sampleResult>
</testResults>
Wie kann ich mir nun alle failureMessage in einer Tabelle ausgeben lassen?
<xsl:for-each select="/testResults/sampleResult[not(@label = preceding::*/@label)]">
<xsl:variable name="label" select="@label"/>
<xsl:variable name="failureMessage" select="@failureMessage"/>
<tr valign="top">
<td>
<xsl:value-of select="$label"/>
</td>
<td>
<xsl:value-of select="$failureMessage"/>
</td>
</xsl:for-each>
Leider geht das so überhaupt nicht. Er gibt mir keiner failureMessage aus.
Biiiite....hiiiilfe.
Carsten
Hallo,
Hmm, hilft mir nicht wirklich.
Vielleicht ist es so anschaulicher:
Ja, danke ;-)
<?xml version="1.0" encoding="UTF-8"?>
<testResults>
<sampleResult timeStamp="23.04.2004 11:26:49" threadName="Testszenario" label="Refresh success="false">
<assertionResult failureMessage="blubig" />
<assertionResult failureMessage="Test failed"/>
<assertionResult failureMessage=""/>
</sampleResult>
</testResults>Wie kann ich mir nun alle failureMessage in einer Tabelle ausgeben lassen?
Entweder so:
<xsl:template match="sampleResult">
<tr>
<td><xsl:value-of select="@label" /></td>
<xsl:apply-templates select="assertionResult" />
</tr>
</xsl:template>
<xsl:template match="assertionResult ">
<td><xsl:value-of select="@failureMessage" /></td>
</xsl:template>
oder so:
<xsl:template match="sampleResult">
<tr>
<td><xsl:value-of select="@label" /></td>
<td>
<xsl:for-each select="assertionResult">
<xsl:value-of select="." />
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
</td>
</tr>
</xsl:template>
Grüße
Thomas
Hallo,
Hmm, hilft mir nicht wirklich.
Vielleicht ist es so anschaulicher:Ja, danke ;-)
<?xml version="1.0" encoding="UTF-8"?>
<testResults>
<sampleResult timeStamp="23.04.2004 11:26:49" threadName="Testszenario" label="Refresh success="false">
<assertionResult failureMessage="blubig" />
<assertionResult failureMessage="Test failed"/>
<assertionResult failureMessage=""/>
</sampleResult>
</testResults>Wie kann ich mir nun alle failureMessage in einer Tabelle ausgeben lassen?
Entweder so:
<xsl:template match="sampleResult">
<tr>
<td><xsl:value-of select="@label" /></td>
<xsl:apply-templates select="assertionResult" />
</tr>
</xsl:template><xsl:template match="assertionResult ">
<td><xsl:value-of select="@failureMessage" /></td>
</xsl:template>oder so:
<xsl:template match="sampleResult">
<tr>
<td><xsl:value-of select="@label" /></td>
<td>
<xsl:for-each select="assertionResult">
<xsl:value-of select="." />
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
</td>
</tr>
</xsl:template>Grüße
Thomas
Vielen Dank,
leider bekomme ich auf beide arten nur die jeweils erste message. Wenn du das nun noch so hinbiegen könntest, dass ich alle 3 ausgegeben bekomme, wärst du mein held.
Danke,
Carsten
Hallo,
leider bekomme ich auf beide arten nur die jeweils erste message. Wenn du das nun noch so hinbiegen könntest, dass ich alle 3 ausgegeben bekomme, wärst du mein held.
Dann muss du noch etwas anderes in deinem XSL haben bzw. du hast es nicht so eingebaut wie vorgeschlagen bzw. dein XML ist anderes als du vorher zeigtest, sonst müsste es klappen. Du müsstes dies noch überprüfen bzw. zeigen, denn so kann ich leider nicht mal Raten, was nicht stimmt.
Grüße
Thomas
PS: du weisst wie unangenehm 'fullquotes' sind? http://de.wikipedia.org/wiki/Fullquote
Hallo,
Du müsstes dies noch überprüfen bzw. zeigen, denn so kann ich leider nicht mal Raten, was nicht stimmt.
Ja, ich zeige es dir morgen noch einmal, nachdem ich noch ein wenig selber getüftelt habe. Danke.
PS: du weisst wie unangenehm 'fullquotes' sind? http://de.wikipedia.org/wiki/Fullquote
Sorry, davon hatte ich bisher noch nichts gehört, aber ich habe es mir zu Herzen genommen. Danke für den Hinweis.
Grüße,
Carsten
Hallo noch einmal,
es hat geklappt, vielen Dank.
Carsten