ilja: ja oder nein checkbox

ich habe eine checkbox

<input name="Freigabe" type="checkbox"/>

in der XML ist es so <Freigabe>-1</Freigabe> steht fuer JA also der checkbox muss ein haekchen haben und bei 0 ist NEIN kein haekchen.

wie mache ich so eine abfrage?

danke,
ilja

  1. Hi,

    <input name="Freigabe" type="checkbox"/>
    in der XML ist es so <Freigabe>-1</Freigabe> steht fuer JA also der checkbox muss ein haekchen haben und bei 0 ist NEIN kein haekchen.
    wie mache ich so eine abfrage?

    xsl:if - als Test vergleichst Du den Inhalt des Freigabe-Elements mit -1.
    Im xsl:if erzeugst Du dann das Attribut checked (per xsl:attribute)

    Für diesen Zweck mußt Du im XSL das input-Element mit öffnendem und schließendem tag schreiben, damit das xsl:if innen rein kann.
    Wenn das output-Format korrekt gesetzt ist, sollte dennoch nur 1 tag (mit / vor dem >) generiert werden.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. danke..

      koenntest du mir ein beispiel fuer meine Freigabe zeigen?

      ilja

      Hi,

      <input name="Freigabe" type="checkbox"/>
      in der XML ist es so <Freigabe>-1</Freigabe> steht fuer JA also der checkbox muss ein haekchen haben und bei 0 ist NEIN kein haekchen.
      wie mache ich so eine abfrage?

      xsl:if - als Test vergleichst Du den Inhalt des Freigabe-Elements mit -1.
      Im xsl:if erzeugst Du dann das Attribut checked (per xsl:attribute)

      Für diesen Zweck mußt Du im XSL das input-Element mit öffnendem und schließendem tag schreiben, damit das xsl:if innen rein kann.
      Wenn das output-Format korrekt gesetzt ist, sollte dennoch nur 1 tag (mit / vor dem >) generiert werden.

      cu,
      Andreas

      1. hmm.. das ist wirzig... :)

        wo ist der fehler?

        ich macher dies

        <xsl:for-each select="Linie">
        <xsl:if test="Freigabe = -1">
        <input checked="true" name="Freigabe" type="checkbox"/>
        </xsl:if>
        </xsl:for-each>

        zeigt den checkbox an... aber nicht checked! wenn ich hier <xsl:if test="Freigabe = -1"> von -1 auf 0 steze, dann verschwindet die ganze checkbox! :) warum? wie kann ich bei -1 dass es angecheckt ist und bei 0 die checkbox dableibt und nicht angechecked!

        danke,
        ilja

        danke..

        koenntest du mir ein beispiel fuer meine Freigabe zeigen?

        ilja

        Hi,

        <input name="Freigabe" type="checkbox"/>
        in der XML ist es so <Freigabe>-1</Freigabe> steht fuer JA also der checkbox muss ein haekchen haben und bei 0 ist NEIN kein haekchen.
        wie mache ich so eine abfrage?

        xsl:if - als Test vergleichst Du den Inhalt des Freigabe-Elements mit -1.
        Im xsl:if erzeugst Du dann das Attribut checked (per xsl:attribute)

        Für diesen Zweck mußt Du im XSL das input-Element mit öffnendem und schließendem tag schreiben, damit das xsl:if innen rein kann.
        Wenn das output-Format korrekt gesetzt ist, sollte dennoch nur 1 tag (mit / vor dem >) generiert werden.

        cu,
        Andreas

        1. Hi,

          hmm.. das ist wirzig... :)

          würzig?

          wo ist der fehler?
          <xsl:for-each select="Linie">
          <xsl:if test="Freigabe = -1">
          <input checked="true" name="Freigabe" type="checkbox"/>
          </xsl:if>
          </xsl:for-each>
          zeigt den checkbox an... aber nicht checked!

          true ist kein zulässiger Wert für das checked-Attribut.

          wenn ich hier <xsl:if test="Freigabe = -1"> von -1 auf 0 steze, dann verschwindet die ganze checkbox! :) warum?

          Weil Du nur für den Fall -1 ein input-Element erzeugst.

          wie kann ich bei -1 dass es angecheckt ist und bei 0 die checkbox dableibt und nicht angechecked!

          xsl:if - als Test vergleichst Du den Inhalt des Freigabe-Elements mit -1.
          Im xsl:if erzeugst Du dann das Attribut checked (per xsl:attribute)

          Für diesen Zweck mußt Du im XSL das input-Element mit öffnendem und schließendem tag schreiben, damit das xsl:if innen rein kann.
          Wenn das output-Format korrekt gesetzt ist, sollte dennoch nur 1 tag (mit / vor dem >) generiert werden.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. würzig?

            ich meinte witzig :)

            true ist kein zulässiger Wert für das checked-Attribut.

            Weil Du nur für den Fall -1 ein input-Element erzeugst.

            oki, dies sieht jetzt so aus

            <xsl:for-each select="Versionen/Version/DAKO/Linien/Linie">
            <xsl:if test="Freigabe = -1">
            <xsl:attribute name="checked"><input name="Freigabe" type="checkbox"/></xsl:attribute>
            </xsl:if>
            </xsl:for-each>

            geht trozdem nicht.. also der checkbox wird garnicht mehr in der XML angezeigt.

            ilja

            1. Hallo,

              <xsl:for-each select="Versionen/Version/DAKO/Linien/Linie">
              <xsl:if test="Freigabe = -1">
              <xsl:attribute name="checked"><input name="Freigabe" type="checkbox"/></xsl:attribute>
              </xsl:if>
              </xsl:for-each>

              geht trozdem nicht.. also der checkbox wird garnicht mehr in der XML angezeigt.

              Damit wird dieses "Attribut" erzeugt:

              checked="<input name="Freigabe" type="checkbox"/>"

              Gesucht ist doch wohl:

              <input name="Freigabe" type="checkbox">
                <xsl:if test="number(Freigabe) = -1">
                  <xsl:attribute name="checked">checked</xsl:attribute>
                </xsl:if>
              </input>

              Ich wuerde mich dafuer entscheiden:

              <xsl:for-each select="...">

              xsl:choose

              <xsl:when test="number(Freigabe) = -1">
                    <input checked="checked" name="Freigabe" type="checkbox"/>
                  </xsl:when>

              <xsl:when test="number(Freigabe) = 0">
                    <input name="Freigabe" type="checkbox"/>
                  </xsl:when>

              </xsl:choose>

              </xsl:for-each>

              oder

              <xsl:for-each select="...">

              <xsl:if test="number(Freigabe) = -1">
                  <input checked="checked" name="Freigabe" type="checkbox"/>
                </xsl:if>

              <xsl:if test="number(Freigabe) = 0">
                  <input name="Freigabe" type="checkbox"/>
                </xsl:if>

              </xsl:for-each>

              und dann noch das xsl:for-each vermeiden:

              <xsl:template match="Freigabe">

              <!-- input-Element einbauen -->

              </xsl:template>

              MfG, Thomas

              1. wie meinst das mit

                Ich wuerde mich dafuer entscheiden:

                <xsl:for-each select="...">

                xsl:choose

                <xsl:when test="number(Freigabe) = -1">
                      <input checked="checked" name="Freigabe" type="checkbox"/>
                    </xsl:when>

                <xsl:when test="number(Freigabe) = 0">
                      <input name="Freigabe" type="checkbox"/>
                    </xsl:when>

                </xsl:choose>

                </xsl:for-each>

                oder

                <xsl:for-each select="...">

                <xsl:if test="number(Freigabe) = -1">
                    <input checked="checked" name="Freigabe" type="checkbox"/>
                  </xsl:if>

                <xsl:if test="number(Freigabe) = 0">
                    <input name="Freigabe" type="checkbox"/>
                  </xsl:if>

                </xsl:for-each>

                danke, es funktioniert!

                und dann noch das xsl:for-each vermeiden:

                <xsl:template match="Freigabe">

                <!-- input-Element einbauen -->

                </xsl:template>

                wie meinst du das? wenn ich die <xsl:template match="Freigabe"> verwende kommt bei mir XML fehler: Das Schlüsselwort xsl:template kann hier nicht verwendet werden.

                deswegen benutze ich es so:

                <xsl:for-each select="Versionen/Version/Linux/Linien/Linie">
                 <xsl:template match="Freigabe">
                  <xsl:if test="number(Freigabe) = -1">
                    <input checked="checked" name="Freigabe" type="checkbox"/>
                  </xsl:if>

                <xsl:if test="number(Freigabe) = 0">
                    <input name="Freigabe" type="checkbox"/>
                  </xsl:if>
                  </xsl:template>
                </xsl:for-each>

                und es funktioniert... sobald ich was aendere mit Template funktioniert es nicht. wann ist es denn gut xsl:template einzusetzen?

                danke noch mal,
                ilja

                1. Hallo,

                  wie meinst du das? wenn ich die <xsl:template match="Freigabe"> verwende kommt bei mir XML fehler: Das Schlüsselwort xsl:template kann hier nicht verwendet werden.

                  Dann stimmt der Anwendungskontext nicht. In dieser Art waere vorzugehen:

                  <xsl:template match="blablub">
                    xsl:apply-templates/
                  </xsl:template>

                  <xsl:template match="Freigabe">
                    <!-- Element Freigabe verarbeiten -->
                  </xsl:template>

                  usw.

                  wann ist es denn gut xsl:template einzusetzen?

                  Wenn man es mit komplexeren Strukturen zu tun hat, die man moeglichst strukturiert verarbeiten moechte.

                  MfG, Thomas

                  1. hm.... trozdem ohne diesen template funktioniert es.... meine XSL hat aber ganz oben einen template

                    so sieht der anfang aus:

                    <xsl:template match="/">
                      <HTML>
                        <HEAD>
                          <TITLE>Linux</TITLE>
                          <link rel="stylesheet" href="css/stylesheet.css" type="text/css"/>
                          <script src="js/functions.inc.js" language="jscript" type="text/javascript"></script>
                        </HEAD>
                        <BODY>
                    <xsl:for-each select="Linux">

                    in der mitte sind viele sehr viele tabellen usw.

                    und so sieht das ende aus:

                    </xsl:for-each>

                    </BODY>
                      </HTML>
                    </xsl:template>

                    </xsl:stylesheet>

                    bis jetzt funktioniert alles.... :)
                    trozdem danke noch mal Thomas!

                    ilja

                    Hallo,

                    wie meinst du das? wenn ich die <xsl:template match="Freigabe"> verwende kommt bei mir XML fehler: Das Schlüsselwort xsl:template kann hier nicht verwendet werden.

                    Dann stimmt der Anwendungskontext nicht. In dieser Art waere vorzugehen:

                    <xsl:template match="blablub">
                      xsl:apply-templates/
                    </xsl:template>

                    <xsl:template match="Freigabe">
                      <!-- Element Freigabe verarbeiten -->
                    </xsl:template>

                    usw.

                    wann ist es denn gut xsl:template einzusetzen?

                    Wenn man es mit komplexeren Strukturen zu tun hat, die man moeglichst strukturiert verarbeiten moechte.

                    MfG, Thomas

                    1. Hallo,

                      hm.... trozdem ohne diesen template funktioniert es.... meine XSL hat aber ganz oben einen template

                      Schau mal das von mir in der letzten Woche unter </archiv/2004/10/91545/#m551255> gepostete Stylesheet zum Konvertieren von HTML-Help-Strukturen an: http://www.datenverdrahten.de/test/hhc2html/hhc2html.xsl.

                      Dort werden mehrere templates verwendet, um vor allem die verschachtelten ul/li-Elemente abfragen zu koennen.

                      Hier waere xsl:for-each nicht sinnvoll, weil man die jeweiligen Verschachtelungstiefen nicht kennt oder erst muehsam abfragen muesste.

                      xsl:for-each kann natuerlich dennoch auch in "Mischformen" sinnvoll sein, wie z. B. hier verwendet: http://www.styleassistant.de/tips/winamp.xsl.

                      bis jetzt funktioniert alles.... :)

                      Prima, aber irgendwann mal nicht mehr ;-).

                      MfG, Thomas

                      1. hmm.. ich habe eine andere frage auch sowas aenliches aber es geht jetzt um <input type="text"

                        ich habe z.b. dies in der XML

                        <a>1</a>

                        wie sieht das dann in der XSL aus wenn ich es in die input uebergeben will also in den value nicht was in den <a> steht sondern mein eigenen text.

                        d.h. wenn hier <a>1</a> "1" steht dann soll er den test1 in den input uebergeben und wenn <a>0</a> "0" ist, dann den text test2.

                        habe es so probiert, aber es geht nicht

                        <xsl:if test="@a= '1'">
                           <input type="text"  value="{test1}"/>
                           <xsl:attribute name="value">test1</xsl:attribute>
                          </xsl:if>

                        <xsl:if test="@a= '0'">
                           <input type="text"  value="{test2}"/>
                           <xsl:attribute name="value">test2</xsl:attribute>
                          </xsl:if>

                        hat jemand eine kleine loesung fuer mich?
                        danke,
                        ilja

                        Hallo,

                        hm.... trozdem ohne diesen template funktioniert es.... meine XSL hat aber ganz oben einen template

                        Schau mal das von mir in der letzten Woche unter </archiv/2004/10/91545/#m551255> gepostete Stylesheet zum Konvertieren von HTML-Help-Strukturen an: http://www.datenverdrahten.de/test/hhc2html/hhc2html.xsl.

                        Dort werden mehrere templates verwendet, um vor allem die verschachtelten ul/li-Elemente abfragen zu koennen.

                        Hier waere xsl:for-each nicht sinnvoll, weil man die jeweiligen Verschachtelungstiefen nicht kennt oder erst muehsam abfragen muesste.

                        xsl:for-each kann natuerlich dennoch auch in "Mischformen" sinnvoll sein, wie z. B. hier verwendet: http://www.styleassistant.de/tips/winamp.xsl.

                        bis jetzt funktioniert alles.... :)

                        Prima, aber irgendwann mal nicht mehr ;-).

                        MfG, Thomas

                        1. Hallo,

                          d.h. wenn hier <a>1</a> "1" steht dann soll er den test1 in den input uebergeben und wenn <a>0</a> "0" ist, dann den text test2.

                          habe es so probiert, aber es geht nicht

                          <xsl:if test="@a= '1'">
                             <input type="text"  value="{test1}"/>
                             <xsl:attribute name="value">test1</xsl:attribute>
                            </xsl:if>

                          <xsl:if test="@a= '0'">
                             <input type="text"  value="{test2}"/>
                             <xsl:attribute name="value">test2</xsl:attribute>
                            </xsl:if>

                          Ist a nun ein Element oder doch ein Attribut (wie im XSL-Code als Attribut a benutzt)? Sind test1 und test2 nun einfache Zeichenketten oder Elemente, deren Inhalt verarbeitet wird (wie im XSL-Code in den Attribute Value Templates benutzt)?

                          Raten bringt nichts. Erarbeite zunaechst die XSL-Grundlagen unter http://de.selfhtml.org/xml/darstellung/index.htm.

                          MfG, Thomas

                          1. a ist ein Element.

                            test1 und test2 sind einfache Zeichenketten.

                            hmm... das ist alles nicht so einfach auch zu verstehen... was da geschrieben ist. ich versuche immer zu ratten, so lernt man auch dabei was... wo du den fehler nicht mehr machst :) vielleicht denke ich falsch.

                            waer dankebar fuer deine hilfe Thomas!

                            ilja

                            Hallo,

                            d.h. wenn hier <a>1</a> "1" steht dann soll er den test1 in den input uebergeben und wenn <a>0</a> "0" ist, dann den text test2.

                            habe es so probiert, aber es geht nicht

                            <xsl:if test="@a= '1'">
                               <input type="text"  value="{test1}"/>
                               <xsl:attribute name="value">test1</xsl:attribute>
                              </xsl:if>

                            <xsl:if test="@a= '0'">
                               <input type="text"  value="{test2}"/>
                               <xsl:attribute name="value">test2</xsl:attribute>
                              </xsl:if>

                            Ist a nun ein Element oder doch ein Attribut (wie im XSL-Code als Attribut a benutzt)? Sind test1 und test2 nun einfache Zeichenketten oder Elemente, deren Inhalt verarbeitet wird (wie im XSL-Code in den Attribute Value Templates benutzt)?

                            Raten bringt nichts. Erarbeite zunaechst die XSL-Grundlagen unter http://de.selfhtml.org/xml/darstellung/index.htm.

                            MfG, Thomas

                            1. Hallo,

                              a ist ein Element.

                              @a fragt aber das Attribut a ab.

                              test1 und test2 sind einfache Zeichenketten.

                              Dann schreibe diese auch so hin.

                              waer dankebar fuer deine hilfe Thomas!

                              Etwas in dieser Art sollte es sein:

                              <xsl:if test="a = '1'">
                                <input type="text" value="test1"/>
                              </xsl:if>

                              <xsl:if test="a = '0'">
                                <input type="text" value="test2"/>
                              </xsl:if>

                              BTW: Wenn auf Zahlenwerte geprueft werden soll, dann tendiere ich eher zu test="number(a) = 1".

                              MfG, Thomas

                              1. vielen dank!

                                das mit dem zahlen habe ich es heute gelernt durch testen und deinen beispiel von heute der oben steht! vielen dank noch mal.

                                ilja

                                Hallo,

                                a ist ein Element.

                                @a fragt aber das Attribut a ab.

                                test1 und test2 sind einfache Zeichenketten.

                                Dann schreibe diese auch so hin.

                                waer dankebar fuer deine hilfe Thomas!

                                Etwas in dieser Art sollte es sein:

                                <xsl:if test="a = '1'">
                                  <input type="text" value="test1"/>
                                </xsl:if>

                                <xsl:if test="a = '0'">
                                  <input type="text" value="test2"/>
                                </xsl:if>

                                BTW: Wenn auf Zahlenwerte geprueft werden soll, dann tendiere ich eher zu test="number(a) = 1".

                                MfG, Thomas

                  2. Hallo Thomas,

                    wie meinst du das? wenn ich die <xsl:template match="Freigabe"> verwende kommt bei mir XML fehler: Das Schlüsselwort xsl:template kann hier nicht verwendet werden.

                    Dann stimmt der Anwendungskontext nicht. In dieser Art waere vorzugehen:

                    https://forum.selfhtml.org/?t=91775&m=552662 ;-)

                    Grüße
                    Thomas - (der andere)