Stefan: xsl:variable mit mehreren Werten

Hallo zusammen,

ich habe folgende Variable in einem XSL sheet:

<xsl:variable name="filter_beleg">
 <entry>1025</entry>
 <entry>1030</entry>
</xsl:variable>

und dann möchte ich auf das xml dokument einen filter anwenden der mit alle Einträge zieht in denen eine der o.g. Belegnummern auftaucht

<xsl:for-each select="buchungen/buchung[belegnr = $filter_beleg/entry]" >
  // Verarbeitung der Datensätze
</xsl:for-each>

das xml dokument sieht in etwa so aus

<buchungen>
  <buchung>
    <kontonummer>4711</kontonummer>
    <betrag>100,20</betrag>
    <belegnr>1020</belegnr>
  </buchung>
  <buchung>
    <kontonummer>4715</kontonummer>
    <betrag>123,45</betrag>
    <belegnr>1025</belegnr>
  </buchung>
  <buchung>
    <kontonummer>0815</kontonummer>
    <betrag>47,80</betrag>
    <belegnr>1030</belegnr>
  </buchung>
</buchungen>

Ergebnis soll also sein, dass er mir nur die beiden letzten <buchung> elemente verarbeitet.

die Variable soll übrigens in der HTML seite dynamisch gefüllt werden. eine Verarbeitung wie z.B:

<xsl:for-each select="buchungen/buchung[(belegnr = 1025) or (belegnr = 1030)]" >
  // Verarbeitung der Datensätze
</xsl:for-each>

ist leider nicht möglich

  1. Hallo,

    <xsl:variable name="filter_beleg">
    <entry>1025</entry>
    <entry>1030</entry>
    </xsl:variable>

    die Variable soll übrigens in der HTML seite dynamisch gefüllt werden. eine Verarbeitung wie z.B:

    Der Weg, wie du hier die Variable füllst ist wenig dynamisch. Wie stellst du das wirklich an?

    bydey

    --
    -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
    -- Navigate all your PHP web projects with  PHP Project Browser--
    1. Hallo,

      <xsl:variable name="filter_beleg">
      <entry>1025</entry>
      <entry>1030</entry>
      </xsl:variable>

      die Variable soll übrigens in der HTML seite dynamisch gefüllt werden. eine Verarbeitung wie z.B:
      Der Weg, wie du hier die Variable füllst ist wenig dynamisch. Wie stellst du das wirklich an?

      bydey

      da habe ich mir noch keine konkreten gedanken drüber gemacht.
      ich wollte eigentlich in der html seite über DOM neue Knoten erzeugen und dei hinzufügen.... aber ich bin da leider etwas blank.... für eine andere vorgehensweise wäre ich dankbar.

  2. Hallo,

    ich würde es mal wie folgt versuchen:

    <xsl:for-each select="irgendwo_müssen_sie_ja_herkommen_die_filter_belege" > z.B document('notwendige-belege.xml')/root/etc....
    <xsl:variable name="filter_beleg">
    <xsl:value-of select="." >
    </xsl:variable>
    <xsl:template-match select="buchungen/buchung[belegnr = $filter_beleg]"/>
    </xsl:for-each>

    <xsl:template match="buchungen/buchung">
       // Verarbeitung der Datensätze
    </xsl:template>

    bydey

    --
    -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
    -- Navigate all your PHP web projects with  PHP Project Browser--
    1. also ich habe es jetzt folgendermaßen fast geschaft

      <xsl:variable name="filter_beleg">
        <entry>1020</entry>
        <entry>1025</entry>
      </xsl:variable>

      <xsl:for-each select="buchungen/buchung[belegnr = msxsl:node-set($filter_beleg)/entry]
       //  Verarbeitung
      </xsl:for-each>

      was mache ich aber wenn die Variable filter_beleg leer ist?
      dann möchte ich ja alles sehen.

      1. Hallo,

        was mache ich aber wenn die Variable filter_beleg leer ist?
        dann möchte ich ja alles sehen.

        War das offensichtlich?
        Vielleicht so:
        <xsl:if test="count(buchungen/buchung[belegnr = msxsl:node-set($filter_beleg)/entry])=0">

        bydey

        --
        -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
        -- Navigate all your PHP web projects with  PHP Project Browser--
        1. Hallo,

          Vielleicht so:
          <xsl:if test="count(buchungen/buchung[belegnr = msxsl:node-set($filter_beleg)/entry])=0">

          msxsl:node-set funktioniert nur im IE bzw. mit dem MSXML.

          Grüße
          Thomas