Announcement

Collapse
No announcement yet.

Fehlende Nullen Hinzufügen

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

  • Fehlende Nullen Hinzufügen

    Hallo Zusammen,

    Hier ist unser Input parameter;
    Code:
    <root>
      <KUNNR>5100051</KUNNR>
      <KUNNR>1255</KUNNR>
      <KUNNR>565656598</KUNNR>
    </root>
    Und hier das gewünschte Format;
    Code:
    <root>
      <KUNNR>0005100051</KUNNR>
      <KUNNR>0000001255</KUNNR>
      <KUNNR>0565656598</KUNNR>
    </root>
    Meine Frage ist, wie könnte man die fehlende Nullen dynamisch erzeugen?
    Schöne grüsse,
    FK

  • #2
    Ein rekursiv aufgerufenes Template bietet sich an, welches die Nullen auffüllt:
    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="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>
    
      <xsl:template match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>
    
      <xsl:template match="KUNNR/text()">
        <xsl:call-template name="nullen_auffuellen">
          <xsl:with-param name="str" select="."/>
        </xsl:call-template>
      </xsl:template>
    
      <xsl:template name="nullen_auffuellen">
        <xsl:param name="str"/>
        <xsl:choose>
          <xsl:when test="string-length($str) &lt; 10">
            <xsl:call-template name="nullen_auffuellen">
              <xsl:with-param name="str" select="concat('0',$str)"/>
            </xsl:call-template>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="$str"/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>
    
    </xsl:stylesheet>
    Falls XSLT/XPath 2.0 verfügbar sind, gibt es kompaktere Wege, z. B.:
    Code:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:fn="http://www.w3.org/2005/xpath-functions">
    
      <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>
    
      <xsl:template match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>
    
      <xsl:template match="KUNNR/text()">
        <xsl:for-each select="1 to 10 - fn:string-length(.)">
          <xsl:text>0</xsl:text>
        </xsl:for-each>    
        <xsl:value-of select="."/>    
      </xsl:template>
    
    </xsl:stylesheet>
    Hinweis: Das am Anfang stehende Identitäts-Template kopiert das Ausgangsdokument in den Ausgabebaum, wobei für die Textknoten der KUNNR-Elemente die Auffüllung mit Nullen bemüht wird.

    Comment


    • #3
      Vielen Dank. Wir bekommen dabei Infinite loop Meldung.
      <xsl:stylesheet version="1.0>

      Comment


      • #4
        Ich habe meine Beispiele mit Saxon getestet und keine Probleme erhalten.

        Comment

        Working...
        X