XSL Laie: XSL Darstellung

Hallo

Ich möchte in einer Zeile folgende Informationen darstellen

<K bearbeiter="frau" param="yes" anz="2"/>
<K bearbeiter="frau" param="no" anz="1"/>
      yes   no
frau   2     1

Frau hat 2 mal yes, 1 mal no geantwortet.

Kann jemand mir helfen? Danke

XSL Laie

  1. hallo

    ich nehme mal an, dass du die xml datei (mit den von dir angegebenen informationen)schon hast oder?
    dann kannst du dieses xml dokument mit hilfe von xsl in eine andere struktur umwandeln. eine tabelle würde sich bei deiner anforderung ganz gut machen.

    cu
    ulli

    1. hallo

      ich nehme mal an, dass du die xml datei (mit den von dir angegebenen informationen)schon hast oder?

      habe die XML Datei

      dann kannst du dieses xml dokument mit hilfe von xsl in eine andere struktur umwandeln. eine tabelle würde sich bei deiner anforderung ganz gut machen.

      Aber wie? in einer Zeile 2 XML-Tags zusammenpacken?
      Kann Du mir bitte ein Beispiel zeigen? Danke

      cu
      ulli

  2. Hallo,

    Ich möchte in einer Zeile folgende Informationen darstellen

    <K bearbeiter="frau" param="yes" anz="2"/>
    <K bearbeiter="frau" param="no" anz="1"/>
          yes   no
    frau   2     1

    Frau hat 2 mal yes, 1 mal no geantwortet.

    <p style="font-family: monospace">
    &#160;&#160;&#160;&#160;&#160;yes&#160;no<br />
    frau&#160;
    <xsl:value-of select="K[@bearbeiter = 'frau' and @param = 'yes']/@anz" />
    &#160;
    <xsl:value-of select="K[@bearbeiter = 'frau' and @param = 'no']/@anz" />
    </p>

    MfG, Thomas

    1. Hallo,

      Ich möchte in einer Zeile folgende Informationen darstellen

      <K bearbeiter="frau" param="yes" anz="2"/>
      <K bearbeiter="frau" param="no" anz="1"/>
            yes   no
      frau   2     1

      Frau hat 2 mal yes, 1 mal no geantwortet.

      <p style="font-family: monospace">
      &#160;&#160;&#160;&#160;&#160;yes&#160;no<br />
      frau&#160;
      <xsl:value-of select="K[@bearbeiter = 'frau' and @param = 'yes']/@anz" />
      &#160;
      <xsl:value-of select="K[@bearbeiter = 'frau' and @param = 'no']/@anz" />
      </p>

      MfG, Thomas

      Was wäre in diesem Fall:
      <K bearbeiter="frau" param="yes" anz="2"/>
      <K bearbeiter="frau" param="no" anz="1"/>
      <K bearbeiter="mann" param="no" anz="1"/>
            yes  no
      frau  2    1
      mann  0    1
      Danke

      1. Hallo,

        Was wäre in diesem Fall:
        <K bearbeiter="frau" param="yes" anz="2"/>
        <K bearbeiter="frau" param="no" anz="1"/>
        <K bearbeiter="mann" param="no" anz="1"/>
              yes  no
        frau  2    1
        mann  0    1

        Vermutlich nicht optimal, aber ein Ansatz und auch nur geeignet, wenn es bei den 4 K-Elementen bleibt:

        <xsl:variable name="frau_yes">
          xsl:choose
            <xsl:when test="K[@bearbeiter = 'frau' and @param = 'yes' and number(@anz) > 0]">
              <xsl:value-of select="K[@bearbeiter = 'frau' and @param = 'yes']/@anz" />
            </xsl:when >
            xsl:otherwise
              <xsl:value-of select="0" />
            </xsl:otherwise>
          </xsl:choose>
        </xsl:variable>

        <xsl:variable name="frau_no">
          xsl:choose
            <xsl:when test="K[@bearbeiter = 'frau' and @param = 'no' and number(@anz) > 0]">
              <xsl:value-of select="K[@bearbeiter = 'frau' and @param = 'no']/@anz" />
            </xsl:when >
            xsl:otherwise
              <xsl:value-of select="0" />
            </xsl:otherwise>
          </xsl:choose>
        </xsl:variable>

        <xsl:variable name="mann_yes">
          xsl:choose
            <xsl:when test="K[@bearbeiter = 'mann' and @param = 'yes' and number(@anz) > 0]">
              <xsl:value-of select="K[@bearbeiter = 'mann' and @param = 'yes']/@anz" />
            </xsl:when >
            xsl:otherwise
              <xsl:value-of select="0" />
            </xsl:otherwise>
          </xsl:choose>
        </xsl:variable>

        <xsl:variable name="mann_no">
          xsl:choose
            <xsl:when test="K[@bearbeiter = 'mann' and @param = 'no' and number(@anz) > 0]">
              <xsl:value-of select="K[@bearbeiter = 'mann' and @param = 'no']/@anz" />
            </xsl:when >
            xsl:otherwise
              <xsl:value-of select="0" />
            </xsl:otherwise>
          </xsl:choose>
        </xsl:variable>

        <p style="font-family: monospace">
        &#160;&#160;&#160;&#160;&#160;yes&#160;no<br />
        frau&#160;<xsl:value-of select="$frau_yes" />
        &#160;&#160;<xsl:value-of select="$frau_no" />
        <br />
        mann&#160;<xsl:value-of select="$mann_yes" />
        &#160;&#160;<xsl:value-of select="$mann_no" />
        </p>

        MfG, Thomas

        1. Hallo,

          Was wäre in diesem Fall:
          <K bearbeiter="frau" param="yes" anz="2"/>
          <K bearbeiter="frau" param="no" anz="1"/>
          <K bearbeiter="mann" param="no" anz="1"/>
                yes  no
          frau  2    1
          mann  0    1

          Vermutlich nicht optimal, aber ein Ansatz und auch nur geeignet, wenn es bei den 4 K-Elementen bleibt:

          <xsl:variable name="frau_yes">
            xsl:choose
              <xsl:when test="K[@bearbeiter = 'frau' and @param = 'yes' and number(@anz) > 0]">
                <xsl:value-of select="K[@bearbeiter = 'frau' and @param = 'yes']/@anz" />
              </xsl:when >
              xsl:otherwise
                <xsl:value-of select="0" />
              </xsl:otherwise>
            </xsl:choose>
          </xsl:variable>

          <xsl:variable name="frau_no">
            xsl:choose
              <xsl:when test="K[@bearbeiter = 'frau' and @param = 'no' and number(@anz) > 0]">
                <xsl:value-of select="K[@bearbeiter = 'frau' and @param = 'no']/@anz" />
              </xsl:when >
              xsl:otherwise
                <xsl:value-of select="0" />
              </xsl:otherwise>
            </xsl:choose>
          </xsl:variable>

          <xsl:variable name="mann_yes">
            xsl:choose
              <xsl:when test="K[@bearbeiter = 'mann' and @param = 'yes' and number(@anz) > 0]">
                <xsl:value-of select="K[@bearbeiter = 'mann' and @param = 'yes']/@anz" />
              </xsl:when >
              xsl:otherwise
                <xsl:value-of select="0" />
              </xsl:otherwise>
            </xsl:choose>
          </xsl:variable>

          <xsl:variable name="mann_no">
            xsl:choose
              <xsl:when test="K[@bearbeiter = 'mann' and @param = 'no' and number(@anz) > 0]">
                <xsl:value-of select="K[@bearbeiter = 'mann' and @param = 'no']/@anz" />
              </xsl:when >
              xsl:otherwise
                <xsl:value-of select="0" />
              </xsl:otherwise>
            </xsl:choose>
          </xsl:variable>

          <p style="font-family: monospace">
          &#160;&#160;&#160;&#160;&#160;yes&#160;no<br />
          frau&#160;<xsl:value-of select="$frau_yes" />
          &#160;&#160;<xsl:value-of select="$frau_no" />
          <br />
          mann&#160;<xsl:value-of select="$mann_yes" />
          &#160;&#160;<xsl:value-of select="$mann_no" />
          </p>

          Danke für Deine Hilfe, aber...
          Ich habe nur beispielweise bearbeiter als frau und mann genannt. Leider weiss ich nicht voraus wie der Bearbeiter heisst "Lehmann", "Fraumann" oder "Kuckuck". Hast Du vielleicht eine Lösung für den Fall. Danke im voraus.
          Laie

          MfG, Thomas

          1. Hallo,

            Ich habe nur beispielweise bearbeiter als frau und mann genannt. Leider weiss ich nicht voraus wie der Bearbeiter heisst "Lehmann", "Fraumann" oder "Kuckuck". Hast Du vielleicht eine Lösung für den Fall.

            Prima, dass Du das erst jetzt bringst ...

            Die Loesung haengt von der gesamten XML-Struktur ab. Ich empfehle zur weiteren Loesungsfindung das XSLT-Kapitel von SELFHTML.

            MfG, Thomas

            PS: Bitte nur die noetigen Stellen zitieren.

            1. Hallo Thomas,

              Prima, dass Du das erst jetzt bringst ...

              Das wäre an sich egal, aber er möchte eine Gruppierung aufgrund von @bearbeitername und bei doppelten (also wo einer sowohl 'yes'2 als auch 'no' werte hat) diese in der selben zeile ausgeben:

              So in der Art:

              <?xml version="1.0" encoding="iso-8859-1"?>
              <bearbeiter>
               <K bearbeiter="mann" datum="20.10.2003" param="no" anz="5"/>
               <K bearbeiter="frau" datum="20.10.2003" param="yes" anz="2"/>
               <K bearbeiter="frau" datum="20.10.2003" param="no" anz="3"/>
               <K bearbeiter="dingsda" datum="20.10.2003" param="no" anz="1"/>
               <K bearbeiter="bla" datum="20.10.2003" param="yes" anz="2"/>
               <K bearbeiter="blabla" datum="20.10.2003" param="yes" anz="3"/>
               <K bearbeiter="auchda" datum="20.10.2003" param="no" anz="1"/>
               <K bearbeiter="nixda" datum="20.10.2003" param="yes" anz="2"/>
               <K bearbeiter="nixda" datum="20.10.2003" param="no" anz="4"/>
              </bearbeiter>

              ----------------------

              <?xml version="1.0" encoding="iso-8859-1"?>
              <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

              <xsl:key name="bearbeiterkey" match="K" use="@bearbeiter" />
              <xsl:template match="/bearbeiter">
              <html>
              <head>
               <title>Untitled</title>
              </head>
              <body>
              <table width="400" border="1">
               <tr>
                <td>bearbeiter</td>
                <td>yes</td>
                <td>no</td>
               </tr>
               <xsl:for-each select="K">
                <xsl:variable name="bearbeitername" select="current()[generate-id() = generate-id(key('bearbeiterkey', @bearbeiter))]" />
                <xsl:if test="$bearbeitername = true()">
                 <tr>
                  <td><xsl:value-of select="@bearbeiter" /></td>
                  <td>
                   <xsl:if test="@param = 'yes'">
                    <xsl:value-of select="@anz" />
                   </xsl:if>
                   &#160;
                  </td>
                  <td>
                   <xsl:if test="@param = 'no'">
                    <xsl:value-of select="@anz" />
                   </xsl:if>
                   &#160;
                  </td>
                 </tr>
                </xsl:if>
               </xsl:for-each>
              </table>

              </body>
              </html>
              </xsl:template>
              </xsl:stylesheet>

              Grüße
              Thomas

              1. Hallo,

                Das wäre an sich egal, aber er möchte eine Gruppierung aufgrund von @bearbeitername und bei doppelten (also wo einer sowohl 'yes'2 als auch 'no' werte hat) diese in der selben zeile ausgeben:

                Ich hielt meine Loesung ja auch nicht fuer optimal, bin aber erstmal auf einen naheliegenden Ansatz fuer das spezielle Problem verfallen. Dass Du das toppen wuerdest, habe ich ja erwartet ;-).

                MfG, Thomas