Announcement

Collapse
No announcement yet.

Substring variabel auslesen

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

  • Substring variabel auslesen

    Hallo zusammen!

    Ich habe wieder mal ein Problem:

    Aus einer XML lese ich einen Wert mittels einer XSLT aus.
    Dabei wird z.B. aus 60,000 60 gemacht, also eine ganze Zahl ohne Kommastellen etc.
    Dies mache ich mittels diesem Code:

    Code:
    <xsl:variable name="Zahl1" select="substring(//ss:Cell[ss:NamedCell/@ss:Name = 'DATA63']/ss:Data, 1, 2)"/>
    also, mittels dem Substring Befehl.
    Nun ist mir jedoch aufgefallen, dass diese zahl nicht immer Zweistellig ist, sonder auch einstellig sein kann. Dies gibt natürlich einen Fehler, da dann aus 6,000 z.B. 6, wird. Dies sollte nicht passieren, da so in einem weiteren Schritt eine Berechnung nicht mehr funktioniert.

    Meine Frage ist also, gibt es eine Möglichkeit, die Vorkommastellen auszulesen und diese dann variabel als Variable zu setzen? Eventuell mit einer if-Abfrage? Oder in ein Integer konvertieren um das Komma rauszuschmeißen?

    Im Moment arbeite ich mit 2 XSLT Dateien, eine für einstellig, die andere für zweistellig. Das ist natürlich nicht die beste Lösung...

    Würde mich über jede Hilfe freuen!

  • #2
    Nimm halt substring-before:
    Code:
    <xsl:variable name="Zahl1" select="substring-before(//ss:Cell[ss:NamedCell/@ss:Name = 'DATA63']/ss:Data, ',')"/>

    Comment


    • #3
      Danke! Danach hab ich gesucht!

      Dennoch würde mich interessieren wie ich grundsätzlich einen String in ein Integer konvertieren kann? wenn ich es mit xs:integer versuche gibts nur ne Fehlermeldung....

      Comment


      • #4
        XSLT/XPath 1.0 haben nur einen numerischen Datentyp "number", der eine Gleitkommazahl darstellt, aber nach englischen Konventionen (also kein Komma, sondern "floating point", etwa 3.1415).

        Mit XSLT/XPath 2.0 gibt es xs:integer und xs:integer("2") sollte auch funktionieren, um die Zeichenkette "2" in den entsprechenden xs:integer Wert umzuwandeln.

        Die Zeichenkette "60,000" ist nach deutschen Konventionen eine Gleitkommazahl, aber XSLT/XPath verwenden (wie die meisten Programmiersprachen) englische Konventionen, da sollte man im XML-Dokument besser "60.000" verwenden. Dann kann man die Zeichenkette erst in xs:double umwandeln, dann in xs:integer. So du das deutsche Fliesskommaformat verarbeiten muss, braucht man translate:

        Code:
            <xsl:variable name="v1" as="xs:string" select="'60,000'"/>
            <xsl:variable name="n1" as="xs:integer" select="xs:integer(xs:double(translate($v1, ',', '.')))"/>

        Comment


        • #5
          Danke für die Antwort. Ist ja komplizierter als ich dachte...
          Hab das ganze auch gleich ausprobiert, jedoch sieht es so aus, dass man anscheinend für "60,000" keine Variable benutzen darf/kann?

          Comment


          • #6
            In dem Beispiel wird der Variablentyp der Variable "v1" als "xs:string" festgelegt. Du musst dann halt im select-Ausdruck sicherstellen, dass ein string zugewiesen wird. Oder das "as"-Attribut weglassen.

            Comment

            Working...
            X