ilja: ais einen element in mehrere inputs auslesen

ich ahbe diesen element hier

<Frame>8E1</Frame>

wie ist es moeglich dass ich in jeder input eins von den element da stehen habe?

also z.b.

<input type="text" value="8"/>
<input type="text" value="E"/>
<input type="text" value="1"/>

er liest aus hier <Frame>8E1</Frame> die erste "8", danach E und als letztes 1 und dies in 3 verschiedene inputs. moeglich sowas?

danke,
ilja

  1. Hallo,

    ich ahbe diesen element hier

    <Frame>8E1</Frame>

    Mal wieder etwas Neues ;-).

    ...
    er liest aus hier <Frame>8E1</Frame> die erste "8", danach E und als letztes 1 und dies in 3 verschiedene inputs. moeglich sowas?

    Ja, XPath bietet auch Zeichenketten-Funktionen:

    <input type="text" value="{substring(Frame,1,1)}"/>
    <input type="text" value="{substring(Frame,2,1)}"/>
    <input type="text" value="{substring(Frame,3,1)}"/>

    MfG, Thomas

    1. danke! :) du hilfst mir sehr! und somit lerne ich es auch!

      ilja

      Hallo,

      ich ahbe diesen element hier

      <Frame>8E1</Frame>

      Mal wieder etwas Neues ;-).

      ...
      er liest aus hier <Frame>8E1</Frame> die erste "8", danach E und als letztes 1 und dies in 3 verschiedene inputs. moeglich sowas?

      Ja, XPath bietet auch Zeichenketten-Funktionen:

      <input type="text" value="{substring(Frame,1,1)}"/>
      <input type="text" value="{substring(Frame,2,1)}"/>
      <input type="text" value="{substring(Frame,3,1)}"/>

      MfG, Thomas

      1. Hallo,

        danke! :) du hilfst mir sehr! und somit lerne ich es auch!

        Hier noch einige Anregungen zum Ausprobieren: http://www.datenverdrahten.de/iproxslt/workshop/workshop.htm.

        MfG, Thomas

      2. Hallo,

        [...] und somit lerne ich es auch!

        Damit es etwas automatisierter (d.h unabhängig davon wie viele Zeichen du im Element oder attribut hast) geht und beim Lernen auch eine Herausforderung da ist ;-):

        Ein recursives Template:

        <xsl:template name="createinputelement">
         <xsl:param name="node" />
         <xsl:param name="valueforfirstinput" select="substring($node,1,1)" />
         <xsl:variable name="valueforrestinput" select="substring-after($node, $valueforfirstinput)" />
         xsl:choose
          <xsl:when test="$valueforrestinput != ''">
           <input type="text" name="{concat(local-name($node), $valueforfirstinput)}" value="{$valueforfirstinput}" /><br />
           <xsl:call-template name="createinputelement">
            <xsl:with-param name="node" select="$node" />
            <xsl:with-param name="valueforfirstinput" select="substring($valueforrestinput,1,1)" />
           </xsl:call-template>
          </xsl:when>
          xsl:otherwise
           <input type="text" name="{concat(local-name($node), $valueforfirstinput)}" value="{$valueforfirstinput}" />
          </xsl:otherwise>
         </xsl:choose>
        </xsl:template>

        Das Template wird dann so aufgerufen (z.B.):
        <xsl:template match="Frame">
         <xsl:call-template name="createinputelement">
          <xsl:with-param name="node" select="." />
         </xsl:call-template>
        </xsl:template>

        oder so:
        <xsl:for-each select="Frame">
         <xsl:call-template name="createinputelement">
          <xsl:with-param name="node" select="." />
         </xsl:call-template>
        </xsl:for-each>

        Es wird (in diesem Beispiel) folgedes erzeugt:
        <input type="text" name="Frame8" value="8"><br>
        <input type="text" name="FrameE" value="E"><br>
        <input type="text" name="Frame1" value="1">

        Grüße
        Thomas

        1. Hallo,
          Ein recursives Template:

          großer Nachteil - fällt mir gerade auf - : wenn es zweimal dasselbe Zeichen vorkommt gibts eine Endlosschleife!

          Grüße
          Thomas

          1. Hallo,
            Ein recursives Template:

            großer Nachteil - fällt mir gerade auf - : wenn es zweimal dasselbe Zeichen vorkommt gibts eine Endlosschleife!

            Jetzt nicht mehr:

            <xsl:template name="createinputelement">
             <xsl:param name="node" />
             <xsl:param name="inputcounter" />
             <xsl:param name="valueforfirstinput" select="substring($node,1,1)" />
             <xsl:variable name="valueforrestinput" select="substring($node, $inputcounter+1)" />
             xsl:choose
              <xsl:when test="$valueforrestinput != ''">
               <input type="text" name="{concat(local-name($node), $valueforfirstinput)}" value="{$valueforfirstinput}" /><xsl:value-of select="$inputcounter" /><br />
               <xsl:call-template name="createinputelement">
                <xsl:with-param name="node" select="$node" />
                <xsl:with-param name="inputcounter" select="$inputcounter +1" />
                <xsl:with-param name="valueforfirstinput" select="substring($valueforrestinput,1,1)" />
               </xsl:call-template>
              </xsl:when>
              xsl:otherwise
               <input type="text" name="{concat(local-name($node), $valueforfirstinput)}" value="{$valueforfirstinput}" />
              </xsl:otherwise>
             </xsl:choose>
            </xsl:template>
            </xsl:stylesheet>

            Aufruf mit:
            <xsl:call-template name="createinputelement">
              <xsl:with-param name="node" select="." />
              <xsl:with-param name="inputcounter" select="1" />
             </xsl:call-template>

            Grüße
            Thomas

            1. hallo Thomas,

              vielen dank! es ist gleich soo viel zu lernen :) hmm so einfach ist das nicht wie ich es sehe... aber die loesung fuer meine XML habe ich jetzt! danke!

              mfg,
              ilja

              Hallo,
              Ein recursives Template:

              großer Nachteil - fällt mir gerade auf - : wenn es zweimal dasselbe Zeichen vorkommt gibts eine Endlosschleife!

              Jetzt nicht mehr:

              <xsl:template name="createinputelement">
               <xsl:param name="node" />
               <xsl:param name="inputcounter" />
               <xsl:param name="valueforfirstinput" select="substring($node,1,1)" />
               <xsl:variable name="valueforrestinput" select="substring($node, $inputcounter+1)" />
               xsl:choose
                <xsl:when test="$valueforrestinput != ''">
                 <input type="text" name="{concat(local-name($node), $valueforfirstinput)}" value="{$valueforfirstinput}" /><xsl:value-of select="$inputcounter" /><br />
                 <xsl:call-template name="createinputelement">
                  <xsl:with-param name="node" select="$node" />
                  <xsl:with-param name="inputcounter" select="$inputcounter +1" />
                  <xsl:with-param name="valueforfirstinput" select="substring($valueforrestinput,1,1)" />
                 </xsl:call-template>
                </xsl:when>
                xsl:otherwise
                 <input type="text" name="{concat(local-name($node), $valueforfirstinput)}" value="{$valueforfirstinput}" />
                </xsl:otherwise>
               </xsl:choose>
              </xsl:template>
              </xsl:stylesheet>

              Aufruf mit:
              <xsl:call-template name="createinputelement">
                <xsl:with-param name="node" select="." />
                <xsl:with-param name="inputcounter" select="1" />
               </xsl:call-template>

              Grüße
              Thomas

          2. Hallo Thomas,

            Ein recursives Template:

            großer Nachteil - fällt mir gerade auf - : wenn es zweimal dasselbe Zeichen vorkommt gibts eine Endlosschleife!

            So kommt man auch zum Ziel:

            <xsl:template match="Frame">
              <xsl:call-template name="createinputelement">
                <xsl:with-param name="node" select="." />
                <xsl:with-param name="nodelength" select="string-length(.)" />
                <xsl:with-param name="i" select="1" />
              </xsl:call-template>
            </xsl:template>

            <xsl:template name="createinputelement">
              <xsl:param name="node" />
              <xsl:param name="nodelength" />
              <xsl:param name="i" />
              <xsl:if test="$i &lt;= $nodelength">
                <input type="text" name="{concat(local-name($node),substring($node,$i,1))}" value="{substring($node,$i,1)}" /><br />
                <xsl:call-template name="createinputelement">
                  <xsl:with-param name="node" select="$node" />
                  <xsl:with-param name="nodelength" select="$nodelength" />
                  <xsl:with-param name="i" select="$i + 1" />
                </xsl:call-template>
              </xsl:if>
            </xsl:template>

            MfG, Thomas

            1. Hallo Thomas,

              Ein recursives Template:

              großer Nachteil - fällt mir gerade auf - : wenn es zweimal dasselbe Zeichen vorkommt gibts eine Endlosschleife!

              So kommt man auch zum Ziel:

              *hehe* auch nicht, bei deinem Template würden die letzen zwei Inputs nicht mehr erzeugt, ich hatte as auch bei meinem zu spät gemerkt ... (tja, nach 9 Stunden Programmiererei darf man etwas müde sein ;-) )

              Aber jetzt:

              <xsl:template name="createinputelement">
               <xsl:param name="node" />
               <xsl:param name="counter" select="1" />
               <xsl:param name="input" select="substring($node,$counter,1)" />
               <xsl:variable name="nextinput" select="substring($node, $counter+1)" />
               xsl:choose
                <xsl:when test="string-length($nextinput) &gt;= 1">
                 <input type="text" name="{concat(local-name($node), $counter)}" value="{$input}" /><br />
                 <xsl:call-template name="createinputelement">
                  <xsl:with-param name="node" select="$node" />
                  <xsl:with-param name="counter" select="$counter +1" />
                  <xsl:with-param name="input" select="substring($nextinput, 1, 1)" />
                 </xsl:call-template>
                </xsl:when>
                xsl:otherwise
                 <input type="text" name="{concat(local-name($node), $counter)}" value="{$input}" />
                </xsl:otherwise>
               </xsl:choose>
              </xsl:template>

              Aufruf:

              <xsl:for-each select="Frame">
              <xsl:call-template name="createinputelement">
               <xsl:with-param name="node" select="." />
              </xsl:call-template>
              </xsl:for-each>

              oder

              <xsl:template match="Frame">
               <xsl:call-template name="createinputelement">
                <xsl:with-param name="node" select="." />
               </xsl:call-template>
              </xsl:template>

              Grüße
              Thomas

              1. Hallo,

                *hehe* auch nicht, bei deinem Template würden die letzen zwei Inputs nicht mehr erzeugt, ich hatte as auch bei meinem zu spät gemerkt ...

                Warum? Ich habe als Ergebnis erhalten:

                <input type="text" name="Frame8" value="8"/><br/><input type="text" name="FrameE" value="E"/><br/><input type="text" name="Frame1" value="1"/><br/>

                (tja, nach 9 Stunden Programmiererei darf man etwas müde sein ;-) )

                Sicher, sicher ;-).

                MfG, Thomas

                1. Hallo,

                  *hehe* auch nicht, bei deinem Template würden die letzen zwei Inputs nicht mehr erzeugt, ich hatte as auch bei meinem zu spät gemerkt ...

                  Warum?

                  Weil ich zu blöd war auch im <xsl:with-param name="nodelength" ... />  den richtigen Node anzugeben! ;-)

                  (tja, nach 9 Stunden Programmiererei darf man etwas müde sein ;-) )

                  Sicher, sicher ;-).

                  und jetzt wird eine leichte Lektüre vom Regal geholt ... für heute habe ich genung angestellt ;-)

                  Grüße
                  Thomas

                  1. Hi,

                    und jetzt wird eine leichte Lektüre vom Regal geholt ... für heute habe ich genung angestellt ;-)

                    Ich empfehle dieses Buch:

                    XSL - Das Einsteigerseminar
                    Der methodische und ausführliche Einstieg

                    ;-)

                    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. Hi Andreas,

                      Ich empfehle dieses Buch:

                      XSL - Das Einsteigerseminar
                      Der methodische und ausführliche Einstieg

                      stimmt, ich kann „fjh” wärmstens empfehlen.

                      Grüße,
                       Roland *fg*

                      1. Na ihr lustigen Kerlchen?

                        Wer den schaden hat, braucht für den Spott nicht zu sorgen, oder was???

                        Aber wisst ihr, so ist das auch nicht schlecht, denn, ist der Ruf mal ruiniert, lebt es sich ganz ungeniert! ;-)

                        Grüße
                        Thomas

                        PS: aus dem Stöbern in den Regalen wurde die Erkenntnis, dass ich dringend ein neue Software für meine Literaturverwaltung brauche ;-)