Carsten : Zugriff auf Elemente gleicher Ebene

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.

  1. salut

    dafür gibts das xsl:for-each konstrukt.

    zufinden in selfhtml.

    grüsse
    gant

    1. 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

      1. 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

        1. 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

          1. 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

            1. 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

              1. Hallo noch einmal,

                es hat geklappt, vielen Dank.

                Carsten