adalbert: Attribute von Elementen ausgeben

Hallo Zusammen!
Ich möchte gerne Elemnte von Attributen über eine xsl ausgeben:

  
<traeger_liste>  
            <traeger V="012345">  
            <name R="Sechser"/>  
            </traeger>  
</traeger_liste>  

Im besten Fall steht in der "Ausgabe"

'012345, Sechser'

Wie würde die entsprechende Anweisung im xsl aussehen?

Viele Grüße
Adalbert

  1. @@adalbert:

    nuqneH

    Wie würde die entsprechende Anweisung im xsl aussehen?

    http://de.selfhtml.org/xml/darstellung/xpathsyntax.htm#attribute und http://xml.klute-thiemann.de/index.html#attribute-value-templates sollten dir weiterhelfen.

    Qapla'

    --
    Wer möchte nicht lieber durch Glück dümmer als durch Schaden klüger werden? (Salvador Dalí)
    1. @@adalbert:

      nuqneH

      Wie würde die entsprechende Anweisung im xsl aussehen?

      http://de.selfhtml.org/xml/darstellung/xpathsyntax.htm#attribute und http://xml.klute-thiemann.de/index.html#attribute-value-templates sollten dir weiterhelfen.

      Qapla'

      Hallo,
      danke für die Links! Nach lesen (und verstehen), habe folgendes:

        
      <?xml version="1.0"?>  
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
        
      <xsl:template match="traeger_liste/traeger/@V">  
        <tr><td><b><xsl:text>Ausgabe Trägernummer:</xsl:text></b></td>  
        <td><xsl:value-of select="." /></td></tr>  
      </xsl:template>  
      </xsl:stylesheet>
      

      Das funktioniert nur leider nicht :-( Ich habe "Name" zum Test weggelassen...

      Viele Grüße
      A.

      1. Hallo adalbert,

        Das funktioniert nur leider nicht :-( Ich habe "Name" zum Test weggelassen...

        Ansatz:

        <?xml version="1.0"?>  
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
          <xsl:template match="traeger_liste">  
            <tr>  
              <td><b>Ausgabe Trägernummer:</b></td>  
              <td><xsl:value-of select="concat(traeger/@V, ', ', traeger/name/@R)"/></td>  
            </tr>  
          </xsl:template>  
        </xsl:stylesheet>
        

        xsl:text ist zur Textausgabe hier nicht nötig.

        Grüße,
        Thomas

        1. Hallo Thomas!
          Das funktioniert super! ;) Ich bekomme es nur (noch) nicht hin, eine Schleife drum herum zu bauen, die alle "Träger" ausgibt...

          Viele Grüße
          Adalbert

          1. Hallo,

            Das funktioniert super! ;) Ich bekomme es nur (noch) nicht hin, eine Schleife drum herum zu bauen, die alle "Träger" ausgibt...

            Dazu ist http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#for_each@title=for-each zu empfehlen.

            Grüße
            Siri

            1. Hallo Siri,

              Dazu ist http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#for_each@title=for-each zu empfehlen.

              xsl:for-each ist vor allem Anfängern nicht als Standardlösung zu empfehlen. Es lohnt sich meistens, Templates zunächst einzeln aufzubauen und mittels xsl:apply-templates aufzurufen (funktionaler Ansatz). Im konkreten Beispiel etwa so:

              <?xml version="1.0"?>  
              <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
                
                <xsl:template match="traeger_liste">  
                  <table>  
                    <!-- thead ... -->  
                    <tbody>  
                      <xsl:apply-templates select="traeger"/>  
                    </tbody>  
                  </table>  
                </xsl:template>  
                
                <xsl:template match="traeger">  
                  <tr>  
                    <td><b>Ausgabe Trägernummer:</b></td>  
                    <td><xsl:value-of select="concat(@V, ', ', name/@R)"/></td>  
                  </tr>  
                </xsl:template>  
                
              </xsl:stylesheet>
              

              Siehe auch Vortragsmaterial (Push vs. Pull, speziell Folien 6/18/19).

              Grüße,
              Thomas

              1. Hallo,

                xsl:for-each ist vor allem Anfängern nicht als Standardlösung zu empfehlen. Es lohnt sich meistens, Templates zunächst einzeln aufzubauen und mittels xsl:apply-templates aufzurufen (funktionaler Ansatz).

                Siehst du das eher didaktisch oder technisch?

                Grüße
                Siri

                1. Hallo Siri,

                  Siehst du das eher didaktisch oder technisch?

                  Sowohl als auch.

                  Ich sehe oft in Büchern oder Tutorials die schnelle Hinwendung zu xsl:for-each, ohne dass zuvor sinnvoll auf den Template-Mechanismus eingegangen wird und in diesem Sinne war mein Hinweis gedacht.

                  Bei flachen, listenartigen Strukturen (Element b n-fach unterhalb von Element a) oder Abzähloperationen, z. B.
                  <xsl:for-each select="1 to 5"><img src="symbol.png" alt="" /></xsl:for-each> (to-Operator aus XPath 2.0), setze ich auch gern auf xsl:for-each.

                  Hat man es mit komplexeren Strukturen zu tun, ist xsl:for-each oft nachteilig hinsichtlich Wartbarkeit und Verständnis.

                  Grüße,
                  Thomas