Announcement

Collapse
No announcement yet.

Mehrfache einträge bereiten mir Kopfzerbrechen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mehrfache einträge bereiten mir Kopfzerbrechen

    Hallo,

    zuerst einmal ein paar einleitende Worte. Ich bin Student und habe vor 3 Wochen angefangen mich in xml xsl einzuarbeiten. Ich entwickle gerade für meine UNI kostenlos eine Optimierung unseres Stundenplans. Zurzeit ist es nur eine Tabelle, welche die Stunden tabelarisch auflistet (textform). Ich will diesen ändern, sodass er die Daten grafisch auflistet, so wie mans von seinem alten Stundenplan aus der Grundschule kennt. In der Grafischen Form hat man zumindest sofort einen Überblick.

    Anbei zwei Bilder die den ist und sollzustand demonstrieren sollen.

    old:


    new:


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

    die struktur der xml sieht in den relevanten teilen so aus (vereinfacht dargestellt)
    <veranstaltungs_liste>
    <veranstaltungs_item>
    <name>name</name>
    .....
    <termine>
    <zeit datum="19.03.2008" wochentag="3_Mittwoch" zeit="09:45" />
    <zeit datum="26.03.2008" wochentag="3_Mittwoch" zeit="09:45" />
    ....
    </termine>
    </veranstaltungs_item>
    ....
    </veranstaltungs_liste>


    mein problem bei der grafischen darstellung ist nun folgendes:

    es gibt die möglichkeit, dass mittwoch um 09:45 nicht nur EIN kurs ist
    dies ist möglich da der studiengang in verschiedene Gruppen aufgeteilt werden kann - z.b. wahlpflichtkurse oder einfach nur sets weil die räume zu klein sind.

    um das problem zu lösen möchte ich für alle zeitpunkte bei denen doppelte termine vorliegen entweder eine anzahl von checkboxen generieren, sodass ich für mittwoch 0945 2 checkboxes habe wo der student entscheiden kann welchen kurs er einblendet. (oder ein dropdownmenü)

    ich scheiter an einer generalisierten abfrage: gibt es montag doppelte kurse? wenn ja wann, welche sind die usw für dienstag mittwoch..

    auf den punkt: wie frag ich ob es doppelte kurse in der selben zeit gibt UND finde raus welche das sind

    (ein alternativer denkansatz war, einfach bei doppelten kursen zur selben zeit den "mittwoch" breiter zu machen und die doppelten nebeneinander darzustellen.. aber auch hier muss ich rausfinden GIBT es doppelte? und WIEVIELE sind das? - (also noch ein weiteres problem))

    über eine antwort würde ich mich sehr freuen - ich habe versucht die suchfunktion zu benutzen aber wahrscheinlich fehlen mir mangels erfahrung die suchbegriffe...


    aktuell funktioniert die ausgabe so:

    <xsl:for-each select="stundenplan_info/daten/stundenplan/veranstaltungListe/veranstaltungItem">
    <xsl:choose>
    <xsl:when test="./termine/zeit[1]/@wochentag='1_Montag'">
    <div>

    er geht alle items durch, wenns ein montag ist baut er das div mit einem bestimmten left wert
    die höhe des divs wird mittels xsl attribute und einer css klasse generiert

    (ein ansatz mit tabellen hatte ich mir auch überlegt, da wird man danke sich unendlich verstrickender coll und rowspans aber noch verrückter - glaube ich)
    vielen dank für eure hilfe, mo

  • #2
    Als Anregung: Zählen der zeit-Elemente mit den speziellen Kriterien und selektiver Zugriff auf die Inhalte.

    Code:
    count(zeit[@wochentag='3_Mittwoch' and @zeit='09:45'])
    
    ...
    
    <xsl:template match="zeit[@wochentag='3_Mittwoch' and @zeit='09:45']">
    ...
    </xsl:template>
    Das Ganze könnte dann über Parameter und benannte Templates mit xsl:call-template gelöst werden.

    Comment


    • #3
      mh das wollte ich irgendwie vermeiden
      so muss ich ja für jede zeitschiene sowas machen
      8 uhr 9.45 11.30
      14.00 15.45 bis 20 uhr und für jeden tag

      kann ich da nicht gleich für jede zeit an jedem tag ne for schleife machen und dann via position() rausfinden ob es a mehrere gibt und b das wievielte es ist?

      wenn ich in dem select part des for each alle nötigen bedingungen eingebe und er wirkl nur alle vom montag 0945 anzeigt, dann funktioniert position doch auch? oder kommen dann andere werte als 1 2 3 raus ? (wenn ich for each übers ganze dokument machen würde und erst IN der for each mit if selectiere kommt ja sowas wie 2 32 53 raus - also irrelevante informationen)

      +zu call template muss i mich dann wohl nochmal belesen

      Comment


      • #4
        Mit xsl:for-each allein wird das nicht funktionieren. Gruppierung (suche nach der Muench-Methode) bietet sich an. Falls das Ganze nicht unbedingt im Browser laufen muss, könnte XSLT/XPath 2.0 etwas mehr Komfort bringen (Stichwort xsl:for-each-group).

        Comment


        • #5
          muss im browser laufen
          sobald ich zu hause bin belese ich mich mal zu den hinweisen die du mir gegeben hast,
          danke erstmal .)

          Comment


          • #6
            (erstmal nur um die vorschläge zu testen, noch keine finale lösung)

            Code:
            	
            <xsl:template name="d1">
            		<xsl:param name="zeit" select="'08:00'"/>
            		<xsl:param name="tag" select="'1_Montag'"/>
            		<xsl:param name="lehrveranstaltung" select="'True'"/>
            		<xsl:for-each select="stundenplan_info/daten/stundenplan/veranstaltungListe/veranstaltungItem//zeit[1][@zeit=$zeit][@wochentag=$wochentag][not(.//@lehrveranstaltung=$lehrveranstaltung)]">	
                           <xsl:value-of select="stundenplan_info/daten/stundenplan/veranstaltungListe/veranstaltungItem/name"/>
            		</xsl:for-each>
            	</xsl:template>
            Code:
            		<xsl:call-template name="d1">
            			<xsl:with-param name="zeit" select="'14:00'"/>
            			<xsl:with-param name="tag" select="'1_Montag'/>
            			<xsl:with-param name="lehrveranstaltung" select="'True'"/>
            		</xsl:call-template>

            so kommt ne fehlermeldung bei with param lehrveranstaltung
            nicht wohlgeformt

            wenn ich alle with params wegnehme kommt ne fehlermeldung
            fehler während der xsl transformation(null)

            mach ich was falsch, hab ich was in meinen schlauen büchern überlesen
            oder hab ich ein grundlegendes problem?

            Comment


            • #7
              Was soll denn mittels xsl:with-param übergeben werden, wenn die anzusteuernden xslaram-Inhalte wieder überschrieben werden (Übergabe von '14:00' vs. Setzen von '08:00')? Entferne die select-Attribute bei xslaram.

              Comment


              • #8
                mein buch sagt mir:

                select bei param
                = default wert -> wenn kein with param übergeben wird

                die beiden benannte fehler ändern sich dadurch nicht

                Comment


                • #9
                  Das mit den Default-Werten ist mir klar, aber ich wusste nicht, ob es auch so gewollt ist. Probiere die Transformation mal mit anderen Browsern (IE) oder mit Standalone-Prozessoren (Saxon, AltovaXML), denn nach meiner Erfahrung macht der Firefox gelegentlich Probleme mit xsl:call-template.
                  Zuletzt editiert von Thomas Meinike; 06.05.2008, 14:16.

                  Comment


                  • #10
                    ich habe es jetzt soweit eingegrenzt das ich weiss, dass es hier dran liegt
                    Code:
                    <xsl:template name="d1">
                    		<xsl:param name="zeit" select="'08:00'"/>
                    		<xsl:param name="tag" select="'1_Montag'"/>
                    		<xsl:param name="lehrveranstaltung" select="'True'"/>
                    		<xsl:for-each select="stundenplan_info/daten/stundenplan/veranstaltungListe/veranstaltungItem//zeit[1][@zeit=$zeit][@wochentag=$wochentag][not(.//@lehrveranstaltung=$lehrveranstaltung)]">
                    mach ich bei den parametern und deren überprüfung in der for each nen fehler?
                    da kommt jetzt immer "(NULL)" raus


                    btw gibts dich auch im irc/icq/msn/skype/ts ? da wär das schnelle fragen stellen viel einfacher

                    danke schonmal, mo

                    Comment


                    • #11
                      edit:
                      wenn ich bei der for each
                      die parameter raus nehm
                      und es mit festen werten mache geht es

                      ich brauch da aber die parameter sonst gehts nicht (und ich hab ja extra default werte definiert damit nen wert vorhanden ist..)

                      Comment


                      • #12
                        okay fehler gefunden
                        ein typischer buchstabendreher

                        die frage ob man dich im icq/msn erreichen kann bleibt - i weiss naemlich das i mit sicherheit noch einiges wissen möchte und vllt kannst du mir dabei helfen

                        wäre sehr nett

                        lg mo

                        Comment


                        • #13
                          Konkrete Fragen, die im besten Fall von allgemeinem Interesse sind, kannst Du gern hier stellen. Ansonsten gilt für mich: Forum != Hotline.

                          Comment

                          Working...
                          X