Paul: Formatierung von Zahlen testen

Moin.
Kann man mit xslt auf einfache Art herausfinden, ob ein bestimmter Wert (<xsl:value-of select="meinWert">) in der Form "12345678" (achtstellige, ganze Zahl) vorliegt?

Beispiele (in Klammern gefährliche Werte):
<xsl:if test="number() and string-length() = 8"> (123456.7)
<xsl:if test="number() and string-length(round()) = 8"> (12345678.9)
<xsl:if test="number() &gt; 9999999 and number() &lt; 10000000"> (12345678a)
...

Paul

  1. Hi,

    Kann man mit xslt auf einfache Art herausfinden, ob ein bestimmter Wert (<xsl:value-of select="meinWert">) in der Form "12345678" (achtstellige, ganze Zahl) vorliegt?

    In XSLT2 gibt's auf jeden Fall reguläre Ausdrücke - http://www.xml.com/pub/a/2003/06/04/tr.html

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. In XSLT2

      Oh, sorry. Hab's vergessen: XSLT 1.0

      1. Hi,

        Oh, sorry. Hab's vergessen: XSLT 1.0

        Kannst du damit was anfangen?
        http://www.dpawson.co.uk/xsl/sect2/N5846.html#d8004e208

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Kannst du damit was anfangen?
          http://www.dpawson.co.uk/xsl/sect2/N5846.html#d8004e208

          Wenn ich ehrlich bin nicht ...

  2. Hallo Paul,

    Kann man mit xslt auf einfache Art herausfinden, ob ein bestimmter Wert (<xsl:value-of select="meinWert">) in der Form "12345678" (achtstellige, ganze Zahl) vorliegt?

    Ansatz:

    <xsl:if test="number($wert) and string-length(string($wert)) = 8">passt</xsl:if>

    Grüße,
    Thomas

    1. Moin Thomas.

      <xsl:if test="number($wert) and string-length(string($wert)) = 8">passt</xsl:if>

      Was ist wenn der Wert 123456.7 ist? (Hatte ich auch als Beispiel in meiner Frage).

      Gruß,
      Paul

    2. @@ThomasM:

      nuqneH

      <xsl:if test="number($wert) and string-length(string($wert)) = 8">passt</xsl:if>

      '01234567'?

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Hallo Gunnar,

        <xsl:if test="number($wert) and string-length(string($wert)) = 8">passt</xsl:if>

        '01234567'?

        Klar, war ein Schnellschuss. Wollte noch als and-Bedingungen not(contains($wert, '.')) und einen substring()-Test auf führende Null hinzufügen, kam aber so schnell nicht dazu. Die anderen Lösungen, speziell mit translate(), sind auch interessant.

        Mit XSLT / XPath 2.0 lassen sich solche Dinge viel generischer angehen …

        Grüße,
        Thomas

  3. @@Paul:

    nuqneH

    <xsl:if test="number() and string-length() = 8"> (123456.7)
    <xsl:if test="number() and string-length(round()) = 8"> (12345678.9)
    <xsl:if test="number() &gt; 9999999 and number() &lt; 10000000"> (12345678a)

    Sollte nicht die Kombination von (1) und (3) das Gewünschte bringen?

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. @@Gunnar Bittersmann:

      nuqneH

      Sollte nicht die Kombination von (1) und (3) das Gewünschte bringen?

      '1.234E+3' argl.

      Oder kennt XSLT diese Schreibweise mit Mantisse und Exponent gar nicht?

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. '1.234E+3' argl.

        OK. Dann müsste man wohl etwas mehr Zeit/Zeilen investieren. Mir reicht vorerst die "einfache Schreibweise".

        Danke trotzdem für den Hinweis,
        Paul

        1. Neuer Vorschlag:

                  <xsl:when test="number() and string-length() = 8">  
                      <xsl:if test="number(substring(.,1,1))">  
                          <xsl:if test="number(substring(.,2,1))">  
                              <xsl:if test="number(substring(.,3,1))">  
                                  <xsl:if test="number(substring(.,4,1))">  
                                      <xsl:if test="number(substring(.,5,1))">  
                                          <xsl:if test="number(substring(.,6,1))">  
                                              <xsl:if test="number(substring(.,7,1))">  
                                                  <xsl:if test="number(substring(.,8,1))">  
                                                      alles klar  
                                                  </xsl:if>  
                                              </xsl:if>  
                                          </xsl:if>  
                                      </xsl:if>  
                                  </xsl:if>  
          		</xsl:if>  
          	</xsl:if>  
          </xsl:if>
          

          Passt soweit es keine 0 innerhalb des Wertes gibt. 0 ist wohl laut numer() keine Zahl...

          1. Passt soweit es keine 0 innerhalb des Wertes gibt. 0 ist wohl laut numer() keine Zahl...

            Man müsste bei jedem

            <xsl:if test="number(substring(.,3,1))">

            noch einen kleine Wert hinzu addieren:

            <xsl:if test="number(substring(.,3,1)+0.1)">

            Aber mir reicht die einfache Form ohne die vielen if's.

            Paul

    2. @@Gunnar Bittersmann:

      nuqneH

      Sollte nicht die Kombination von (1) und (3) das Gewünschte bringen?

      '+1234567' argl.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
    3. Sollte nicht die Kombination von (1) und (3) das Gewünschte bringen?

      Ich versuch's mal...

      1. Om nah hoo pez nyeetz, Paul!

        <wissen_aus_anderen_Sprachen>   wert == trunc(wert) ? ganze Zahl : keine ganze Zahl; </wissen_aus_anderen_Sprachen>

        Matthias

        --
        1/z ist kein Blatt Papier. http://www.billiger-im-urlaub.de/kreis_sw.gif
  4. Hi,

    Kann man mit xslt auf einfache Art herausfinden, ob ein bestimmter Wert (<xsl:value-of select="meinWert">) in der Form "12345678" (achtstellige, ganze Zahl) vorliegt?

    Prüfen, ob string-length(DeinWert) = 8 und translate(DeinWert, "0123456789", "9999999999") = "9999999999" ist.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Hi,

      Hi,

      Kann man mit xslt auf einfache Art herausfinden, ob ein bestimmter Wert (<xsl:value-of select="meinWert">) in der Form "12345678" (achtstellige, ganze Zahl) vorliegt?
      Prüfen, ob string-length(DeinWert) = 8 und translate(DeinWert, "0123456789", "9999999999") = "9999999999" ist.

      PS: falls führende Nullen verboten sein sollen, noch prüfen, ob die erste Stelle keine Null ist.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      1. Hi,

        Kann man mit xslt auf einfache Art herausfinden, ob ein bestimmter Wert (<xsl:value-of select="meinWert">) in der Form "12345678" (achtstellige, ganze Zahl) vorliegt?
        Prüfen, ob string-length(DeinWert) = 8 und translate(DeinWert, "0123456789", "9999999999") = "9999999999" ist.
        PS: falls führende Nullen verboten sein sollen, noch prüfen, ob die erste Stelle keine Null ist.

        PPS: hinten nach dem "=" müssen es natürlich genau 8 Neuner sein, nicht 10 wie oben geschrieben.
        Und damit kann man sich dann auch die Prüfung auf string-length schenken.
        Nur evtl. eine führende Null muß zusätzlich geprüft werden, wenn die verboten sein soll.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.