dey: count mit Bedingung

Moin moin,

ich versuche einen xsl:value-of select="count mit der Bedingung, dass das Feld "Result" den Wert "Changed" enthalten muss und zu der entsprechenden Gruppe gehört:

1. das mit Result und changed wollte ich folgendermassen lösen

  • <xsl:value-of select="count(//Result[Result = 'Changed'])"/>
  • das ended mit der Fehlermeldung, dass ...(beim Versuch die Fehlermeldung erneut zu erzeugen, kommt keine Fehlermeldung mehr---dafür)
  • Frage ich nur nach Result erhalte ich 350; hänge ich die Bedingung dran erhalte ich 0

2. das mit Gruppe werde ich folgendermassen versuchen

  • wenn 1. gelöst ist, werde ich wissen, wie ich count mit einer Bedingung verknüpfe
  • lade den Wert Gruppe in eine Variable
  • verwende diese Variable wiederum als Bedingung für Gruppe in count

Auszug XML:

<xmlDocument>
        <Group>
                <GroupNumber>0</GroupNumber>
                <JobList>
                        <JobName>946310CA.BOT/BOTTOM</JobName>
                </JobList>
                <LineItemList>
                        <LineItem>
                                <MachineName>NXT1</MachineName>
                                <FeederItemList>
<FeederItem>
<Position>1 -  1</Position><Result>---</Result><PartNumber>&#160;</PartNumber><PartComment>&#160;</PartComment><Type>&#160;</Type><TapeWidth>&#160;</TapeWidth><Qty>&#160;</Qty><Shape>&#160;</Shape><Package>&#160;</Package><PartLength>&#160;</PartLength><PartWidth>&#160;</PartWidth><PartHeight>&#160;</PartHeight></FeederItem>
.....
<FeederItem>
<Position>1 -  5</Position><Result>---</Result><PartNumber>853366</PartNumber><PartComment>&#160;</PartComment><Type>Paper</Type><TapeWidth>8</TapeWidth><Qty>6</Qty><Shape>1590</Shape><Package>TM81</Package><PartLength>3.40</PartLength><PartWidth>1.30</PartWidth><PartHeight>1.30</PartHeight></FeederItem>

Auszug XSL:

<xsl:template match="JobList">
        <div style="margin-left:30">
                <xsl:for-each select="JobName">
                        <div><xsl:value-of select="."/></div>
                        <div><xsl:value-of select="count(//Result[Result = 'Changed'])"/></div>
                </xsl:for-each>
        </div>
</xsl:template>

bydey

--
New <div class="excellent style element">Juenger</div> 8o))
  1. Hi,

    • <xsl:value-of select="count(//Result[Result = 'Changed'])"/>

    Du hast also eine Struktur, die irgendwo

    <Result>
    ...
        <Result>Changed</Result>
    ...
    </Result>

    enthält? Wenn nicht, möchtest Du Dich vermutlich mit text() beschäftigen :-)

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Hallo dey,

    gute Frage, nächste Frage. Ich würde das mit einer Funktion lösen. count() scheint da nicht so vielversprechend zu sein.

    Du legst dir eine Variable zurecht, durchläufst die Knoten und inkrementierst die Variable, falls in dem Tag "Changed" drinsteht.

    Das geht mit proceeding:sibling oder so ähnlich. Wie man Funktionen in XSLT schreibt, weiß ich aber noch.

    Wie dumm, wenn man keine Lektüre mehr da hat :(.

    Grüße,

    Wolfram

    1. Hallo,

      gute Frage, nächste Frage. Ich würde das mit einer Funktion lösen. count() scheint da nicht so vielversprechend zu sein.

      count() ist eine Funktion ;-) und sie ist auch die richtige.

      Du legst dir eine Variable zurecht, durchläufst die Knoten und inkrementierst die Variable, falls in dem Tag "Changed" drinsteht.

      Das macht auch count().

      Wie man Funktionen in XSLT schreibt, weiß ich aber noch.

      ?? wie meinen ;-)

      Wie dumm, wenn man keine Lektüre mehr da hat :(.

      Du kennst doch http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm ?

      Grüße
      Thomas

      1. Moin moin,

        Hallo,

        gute Frage, nächste Frage. Ich würde das mit einer Funktion lösen. count() scheint da nicht so vielversprechend zu sein.
        »»

        count() ist eine Funktion ;-) und sie ist auch die richtige.

        Und wie die richtig ist!!!!!

        Du legst dir eine Variable zurecht, durchläufst die Knoten und inkrementierst die Variable, falls in dem Tag "Changed" drinsteht.
        »»

        Da müsste ich ca. die 3-fache Menge Code verwenden: man versrickt da sehr in with-param

        Das macht auch count().

        Und das sehr gut mit nur 2 - 4 Zeilen.

        Wie man Funktionen in XSLT schreibt, weiß ich aber noch.

        ?? wie meinen ;-)

        Wie dumm, wenn man keine Lektüre mehr da hat :(.

        Du kennst doch http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm ?

        Problem ist mal wieder alle Code-Schnipsel zu finden und zusammenzufügen, wen's interessiert:

        <!-- Comment: replace of GroupNumber with $vgroupnum-->
                <xsl:variable name="vgroupnum">
                              <xsl:value-of select="GroupNumber"/>
                </xsl:variable>
                <hr size="1" />Group <xsl:value-of select="$vgroupnum" /><hr size="1" /></H3>
                <div><xsl:apply-templates select="JobList" /></div>
                <!-- Comment: number of feeder changes counted and displayed-->
                <div align="right"># of Feeders 'Changed':
                        <xsl:value-of select="count(//Group[position()=$vgroupnum+1]/LineItemList/
                        LineItem/FeederItemList/FeederItem/Result[text() = 'Changed'])"/></div>
                <div><xsl:apply-templates select="LineItemList" /></div>

        bydey

        --
        New <div class="excellent style element">Juenger</div> 8o))
        1. Hallo,

          <div align="right"># of Feeders 'Changed':

          "Bastelt" da jemand gerade an einem XSLT für RSS-Feeds? ;-)

          Grüße
          Thomas

          1. Moin moin Thomas,

            "Bastelt" da jemand gerade an einem XSLT für RSS-Feeds? ;-)

            Was sind RSS-Feeds?

            bydey

            --
            New <div class="excellent style element">Juenger</div> 8o))
            1. Hallo "day",

              "Bastelt" da jemand gerade an einem XSLT für RSS-Feeds? ;-)

              Was sind RSS-Feeds?

              Die vorletze Hipe im WWW ;-)

              http://www.xml.com/pub/a/2002/12/18/dive-into-xml.html

              http://www.rss-nachrichten.de/

              http://www.google.de/search?hl=de&ie=ISO-8859-1&q=RSS-Feed&btnG=Google-Suche&meta=

              Grüße
              Thomas

              1. Moin moin,

                Die vorletze Hipe im WWW ;-)

                http://www.xml.com/pub/a/2002/12/18/dive-into-xml.html

                http://www.rss-nachrichten.de/

                http://www.google.de/search?hl=de&ie=ISO-8859-1&q=RSS-Feed&btnG=Google-Suche&meta=

                Nein, damit hat es nix zu tun. Es geht um Rüstlisten für die SMD-Produktion.

                bydey

                --
                New <div class="excellent style element">Juenger</div> 8o))
  3. Hallo,

    1. das mit Result und changed wollte ich folgendermassen lösen
    • <xsl:value-of select="count(//Result[Result = 'Changed'])"/>

    Du wirst vermutlich
    <xsl:value-of select="count(//Result[. = 'Changed'])"/> suchen.

    Grüße
    Thomas