Udo Martens: Split in 3 Felder

Hallo,

ich möchte mit XSLT ein Quellfeld in 3 Zielfelder mappen. Das Quellfeld enthält die Werte durch 1-n Leerzeichen getrennt, welche dann verschwinden sollen. Also zum Beispiel:

<quelle>  aa   bbb   cccc  </quelle>

sollte dann in

<ziel>
  <feld1>aa</feld1>
  <feld2>bbb</feld2>
  <feld3>cccc</feld3>

gemappt werden.

Ist das überhaupt möglich mit XSLT? Schließlich kann man die Substrings nur mit (festen) Positionen rausholen. Oder gibt es irgendeinen Schmutztrick?

Grüße,
Udo

  1. echo $begrüßung;

    ich möchte mit XSLT ein Quellfeld in 3 Zielfelder mappen.

    Dieses Beispiel sollte helfen: http://www.dpawson.co.uk/xsl/sect2/N7240.html#d9396e343

    echo "$verabschiedung $name";

    1. Hallo dedlfix, hallo Thomas,

      vielen Dank für eure Hilfe. Das Script läuft und der Tag ist gerettet.

      Udo

  2. Hallo,

    ich möchte mit XSLT ein Quellfeld in 3 Zielfelder mappen. Das Quellfeld enthält die Werte durch 1-n Leerzeichen getrennt, welche dann verschwinden sollen. Also zum Beispiel:
    Ist das überhaupt möglich mit XSLT?

    Ja.

    Schließlich kann man die Substrings nur mit (festen) Positionen rausholen. Oder gibt es irgendeinen Schmutztrick?

    Ich weiss nicht was du mit "Schmutztrick" meinst. Ein recursives Template erledigt diese Aufgabe.

    <xsl:template match="quelle">
    <xsl:variable name="thisnode" select="normalize-space(.)" />
    <ziel>
      <xsl:call-template name="split">
       <xsl:with-param name="node" select="$thisnode" />
       <xsl:with-param name="startCounter" select="0" />
      </xsl:call-template>
    </ziel>
    </xsl:template>
    <xsl:template name="split">
    <xsl:param name="node" />
    <xsl:param name="startCounter" />
    <xsl:variable name="nrCounter" select="$startCounter + 1" />
    <xsl:variable name="split" select="substring-before($node, ' ')" />
    <xsl:variable name="rest" select="substring-after($node, $split)" />
    <xsl:if test="$split != ''">
      <xsl:element name="feld{$nrCounter}">
       <xsl:value-of select="$split" />
      </xsl:element>
      <xsl:call-template name="split">
       <xsl:with-param name="node" select="concat(normalize-space($rest), ' ')" />
       <xsl:with-param name="startCounter" select="$nrCounter" />
      </xsl:call-template>
    </xsl:if>
    </xsl:template>

    Grüße
    Thomas

    --
    Surftip: kennen Sie schon Pipolino's Clowntheater?
    http://www.clowntheater-pipolino.net/