ais einen element in mehrere inputs auslesen
ilja
- xsl
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
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
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
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
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
Hallo,
Ein recursives Template:
großer Nachteil - fällt mir gerade auf - : wenn es zweimal dasselbe Zeichen vorkommt gibts eine Endlosschleife!
Grüße
Thomas
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
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
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 <= $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
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) >= 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
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
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
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
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*
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 ;-)