# konvertieren in andere Basis (Dezimal zu hexadezimal) in XSLT



## gabifi (14. September 2006)

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


----------



## deepthroat (14. September 2006)

Hi.

Schau mal hier:

```
<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ß


----------



## gabifi (15. September 2006)

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


----------



## deepthroat (16. September 2006)

Hi.

Nein, leider hab ich das umgekehrt gerade nicht parat. Evtl. kannst du bei Google was passendes finden.

Gruß


----------



## JumboJetJames (25. April 2008)

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">

	<xsaram name="x"/>
	<xsaram 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


----------



## deepthroat (30. April 2008)

Hi.





JumboJetJames hat gesagt.:


> Den Aufruf habe ich in folgender Art geschrieben:
> 
> <xs:call-template name="decimal2x">
> <xs:with-param  name="x">233</xs:with-param>
> ...


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.


JumboJetJames hat gesagt.:


> Die Quellen habe ich mal angehängt.


Echt?!

Versuch's mal so:
	
	
	



```
<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!


----------

