Announcement

Collapse
No announcement yet.

for schleife

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

  • for schleife

    Hi kann mir jemand bei folgendem Problem helfen:

    ich habe folgenden String test="232DNEMS43434343MDMMSM" (in einer XML)

    und dieser soll in XSLT durch z.B eine for schleife folgendermaßen ausgegeben werden.......

    test=23 2D NEMS4 3434 343M DMMS M (2 mal zweier Blöcke und denn Rest in 4 Blöcken)

    dabei muss die Funktion erkennen wenn es das ende vom String erreicht hat...........

    wenn jamand eine Idee hat wie dies vielleicht aussehen könnte...............

    Danke im vorraus für eure Hilfe!!!!!!!!!!!

  • #2
    wenn ihr noch mehr informationen benötigt dann sagt einfach bescheid...........

    Ich hoffe hier könnt mir helfen!!!!!!!!!!!

    Comment


    • #3
      Kannst Du XSLT/XPath 2.0 verwenden? Soll der dritte Block wirklich fünf Zeichen enthalten?

      Comment


      • #4
        Die ersten 4 Ziffern sollen in zweier Blöcken ausgegeben werden mit einem Leerzeichen dazwischen und der Rest der Zeichenkette immer in 4er Blöcken mit einem Leerzeichen!

        Beispiel: DE253477889026623

        Ausgabe: DE 25 3477 8890 2662 3

        Ich kann nur XSLT/XPATH 1.0 verwenden!!!!!!!!

        Comment


        • #5
          Schöne Übung zum rekursiven Templateaufruf, hier mal ein ausbaufähiger und ggf. optimierbarer Ansatz:

          Code:
          <?xml version="1.0" encoding="ISO-8859-1"?>
          <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:output method="text" encoding="ISO-8859-1"/>
          
            <xsl:template match="test">
              <xsl:variable name="str" select="."/>
              <xsl:call-template name="str_zerleger">
                <xsl:with-param name="str" select="$str"/>
                <xsl:with-param name="str_temp2" select="''"/>
                <xsl:with-param name="i" select="0"/>
              </xsl:call-template>
            </xsl:template>
          
            <xsl:template name="str_zerleger">
              <xsl:param name="str" select="$str"/>
              <xsl:param name="str_temp2" select="$str_temp2"/>
              <xsl:param name="i" select="$i"/>
              <xsl:param name="i_max" select="ceiling(string-length($str) div 4)"/>
              <xsl:choose>
                <xsl:when test="$i &lt;= $i_max">
                  <xsl:variable name="str_temp1" select="substring($str,1+$i*4,4)"/>
                  <xsl:call-template name="str_zerleger">
                    <xsl:with-param name="str" select="$str"/>
                    <xsl:with-param name="str_temp2" select="concat($str_temp2,$str_temp1,' ')"/>
                    <xsl:with-param name="i" select="$i+1"/>
                    <xsl:with-param name="i_max" select="$i_max"/>
                  </xsl:call-template>
                </xsl:when>
                <xsl:otherwise>
                  <xsl:variable name="str_fertig"
                   select="normalize-space(concat(substring($str_temp2,1,2),' ',substring($str_temp2,3)))"/>
                  <xsl:value-of select="$str_fertig"/>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:template>
          
          </xsl:stylesheet>
          Bezogen auf dieses Test-XML-Dokument:
          Code:
          <?xml version="1.0" encoding="ISO-8859-1"?>
          <test>DE253477889026623</test>
          wird das gewünschte Ergebnis (DE 25 3477 8890 2662 3) erhalten.

          Comment

          Working...
          X