konvertieren in andere Basis (Dezimal zu hexadezimal) in XSLT

gabifi

Mitglied
Hallo,

gibt es ne einfache und schnelle Möglichkeit, eine Zahl bzw. einen String aus dem Dezimalsystem in Hexadezimal und Binär zu bekommen sowie umgekehrt? Gibt es da ne Funktion mit entsprechender Formatübergabe oder muss ich mir da selber was schreiben?

Vielen Dank, über Code-Beispiele wären ganz toll
Gabriel
 
Hi.

Schau mal hier:
XML:
<xsl:template name="decimal2x">
  <xsl:param name="x"/>
  <xsl:param name="base"/>

  <xsl:variable name="symbols">0123456789ABCDEF</xsl:variable>

  <xsl:variable name="temp">
    <xsl:if test="$x &gt;= $base">
      <xsl:call-template name="decimal2x">
        <xsl:with-param name="x" select="floor($x div $base)"/>
        <xsl:with-param name="base" select="$base"/>
      </xsl:call-template>
    </xsl:if>
  </xsl:variable>
  <xsl:value-of select="concat($temp, substring($symbols, $x mod $base + 1, 1))"/>
</xsl:template>
Gruß
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

vielen herzlichen Dank.

Bin gleich mal so unverschämt und frag, ob du auch das umgekehrte parat hast. Muss Hexadezimal und binär wieder in dezimal bringen, wobei letzteres ja net so schwer is. Würd mir Arbeit ersparen, da mir die Zeit etwas drängt.

Gabriel
 
hallo,

ich habe die Verwendung des o.g. Templates versucht, aber mir sind da einige Dinge nicht klar. Ich komme mehr aus der technischen Programmierung und brauche das o.g. Template eigentlich nur, um eine XML-Konfigurationsdatei über XSL im Browser zu zeigen. Einige Werte sollen dabei eben hexadezimal angezeigt werden.

Ich habe das Template in die XSL-Datei eingebunden und es wird auch ohne Fehlermeldung aufgerufen.

<xsl:template name="decimal2x">

<xs:param name="x"/>
<xs:param name="base"/>

<xs:variable name="symbols">0123456789ABCDEF</xs:variable>

<xs:variable name="temp">

<xs:if test="$x &gt;= $base">

<xs:call-template name="decimal2x">

<xs:with-param name="x" select="floor($x div $base)"/>
<xs:with-param name="base" select="$base" />

</xs:call-template>

</xs:if>

</xs:variable>

<xs:value-of select="concat($temp, substring($symbols, $x mod $base +1,1))"/>

</xsl:template>


Den Aufruf habe ich in folgender Art geschrieben:

<xs:call-template name="decimal2x">
<xs:with-param name="x">233</xs:with-param>
<xs:with-param name="base">16</xs:with-param>
</xs:call-template>

Der Einfachheit halber habe ich hier einmal Zahlen (33,16) zur Berechnung übergeben.

Anschliessend versuche ich das Ergebnis der Berechnung (was ja in temp steht ?) auszulesen und in ein Tabellenfeld zu schreiben:

<td><xsl:value-of select="temp"/></td>

Aber das Feld bleibt leer. Was geht daneben ? Die Quellen habe ich mal angehängt.


mfg

Simon
 
Hi.
Den Aufruf habe ich in folgender Art geschrieben:

<xs:call-template name="decimal2x">
<xs:with-param name="x">233</xs:with-param>
<xs:with-param name="base">16</xs:with-param>
</xs:call-template>

Der Einfachheit halber habe ich hier einmal Zahlen (33,16) zur Berechnung übergeben.

Anschliessend versuche ich das Ergebnis der Berechnung (was ja in temp steht ?)
Nein, das Ergebnis steht nicht in temp. Innerhalb des Templates steht ein Teilergebnis in "temp". Das Ergebnis wird dort ausgegeben wo der Aufruf des Templates stattgefunden hat.
Die Quellen habe ich mal angehängt.
Echt?!

Versuch's mal so:
XML:
<td><xs:call-template name="decimal2x">
<xs:with-param name="x">233</xs:with-param>
<xs:with-param name="base">16</xs:with-param>
</xs:call-template></td>

PS: Bitte benutze die Code-Tags!
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück