Arnold: base64 in hexadezimal Umwandeln

Hallo,
Ich bin gerade am verzweifeln! In meiner xml Datei sind Werte in der base64-codierten Form gespeichert, in der ich sie nicht gebrauchen kann. Ich schaffe es aber nicht diese Werte in eine anständige hexadezimal Form zu kriegen, in der ich sie brauche. Am liebsten würde ich es über xslt konvertieren, aber weder so, noch über ein anderes Tool ist es mir bisher gelungen.
Bin über jeden Tip glücklich!
Gruß, Arnold

  1. Hi Arnold!

    Ich bin gerade am verzweifeln!

    Ja ich auch, aber diese Aussage ist null zielführend.

    In meiner xml Datei sind Werte in der base64-codierten Form gespeichert, in der ich sie nicht gebrauchen kann.

    Das ist bedauerlich.

    Ich schaffe es aber nicht diese Werte in eine anständige hexadezimal Form zu kriegen, in der ich sie brauche.

    _Wie_ schaffst Du es nicht, was hast du gemacht, versucht?

    Am liebsten würde ich es über xslt konvertieren, aber weder so, noch über ein anderes Tool ist es mir bisher gelungen.

    Was bedeutet dieser Satz genau?

    Bin über jeden Tip glücklich!

    Trinkgeld gibt's hier nicht!

    off:PP

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
  2. Hallo Arnold,

    Ich schaffe es aber nicht diese Werte in eine anständige hexadezimal Form zu kriegen, in der ich sie brauche. Am liebsten würde ich es über xslt konvertieren, aber weder so, noch über ein anderes Tool ist es mir bisher gelungen.

    Mit XSLT 2.0, hier speziell den Erweiterungen von XPath 2.0, bietet sich dieses Vorgehen an:

    <xsl:variable name="base64_string" select="'VGVzdHN0cmluZw=='"/><!-- das Wort 'Teststring' base64_encoded -->  
    <xsl:variable name="hexbin_string" select="xs:base64Binary($base64_string) cast as xs:hexBinary"/>  
    <!-- oder  
    <xsl:variable name="hexbin_string" select="xs:hexBinary(xs:base64Binary($base64_string))"/>  
    -->  
    <xsl:value-of select="$hexbin_string"/><!-- 54657374737472696E67 -->
    

    Grüße,
    Thomas

    1. Vielen Dank für diese schon um einiges hilfreichere Antwort.
      Leider zeigt Kernow 1.6 bei mir immernoch folgenden Fehler, den ich einfach nicht weg bekomme:

      XPath syntax error at char 32 on line 6 in {...4_string) cast as xs:hexBin...}:
          Undeclared namespace prefix {xp}

      Vielleicht hast du eine Idee, woran es liegen könnte?
      Gruß,
      Arnold

      1. Hallo Arnold,

        Vielen Dank für diese schon um einiges hilfreichere Antwort.
        Leider zeigt Kernow 1.6 bei mir immernoch folgenden Fehler, den ich einfach nicht weg bekomme:

        Ich gehe mal davon aus, dass hier eine aktuelle Saxon-Version im Hintergrund liegt, dann ist XSLT 2.0 nebst XPath 2.0 verwendbar.

        XPath syntax error at char 32 on line 6 in {...4_string) cast as xs:hexBin...}:
            Undeclared namespace prefix {xp}

        xp? Das sollte wohl xs lauten.

        Ich habe das gepostete Beispiel so probiert:

        <?xml version="1.0" encoding="ISO-8859-1"?>  
        <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
          xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"  
          exclude-result-prefixes="fn xs">  
          
          <xsl:output method="text" encoding="UTF-8"/>  
          
          <xsl:template match="/">  
          
            <xsl:variable name="base64_string" select="'VGVzdHN0cmluZw=='"/><!-- das Wort 'Teststring' base64_encoded -->  
            <xsl:variable name="hexbin_string" select="xs:base64Binary($base64_string) cast as xs:hexBinary"/>  
            <!-- oder  
            <xsl:variable name="hexbin_string" select="xs:hexBinary(xs:base64Binary($base64_string))"/>  
            -->  
            <xsl:value-of select="$hexbin_string"/><!-- 54657374737472696E67 -->  
          
          </xsl:template>  
          
        </xsl:stylesheet>
        

        Transformieren einfach gegen ein Dummy-XML-Dokument in der Form:

        <?xml version="1.0" encoding="UTF-8"?>  
        <test></test>
        

        Grüße,
        Thomas

        1. Hey Thomas
          Ich habe jetzt das von dir gezeigte Beispiel genommen und eine ganz neue Fehlermeldung erhalten:

          Error
            java.io.FileNotFoundException: C:\ (...) \Kernow
            (Zugriff verweigert)
          null: java.io.FileNotFoundException: C:\ (...) \Kernow (Zugriff verweigert)
          <impossible to build the stack trace>

          Ich gehe mal davon aus, dass hier eine aktuelle Saxon-Version im Hintergrund liegt, dann ist XSLT 2.0 nebst XPath 2.0 verwendbar.

          Saxon 9.0.0.4 sollte doch fast die aktuellste Version sein.

          Falls jemand was dazu einfällt, wäre cool wenn ich etwas Hilfe bekäme.

          Danke, Arnold

          1. Hallo Arnold,

            Ich habe jetzt das von dir gezeigte Beispiel genommen und eine ganz neue Fehlermeldung erhalten:

            Error
              java.io.FileNotFoundException: C:\ (...) \Kernow
              (Zugriff verweigert)
            null: java.io.FileNotFoundException: C:\ (...) \Kernow (Zugriff verweigert)
            <impossible to build the stack trace>

            Ich habe mal Kernow 1.6 installiert (enthält Saxon 9.0.0.4-Basic) und damit funktioniert mein Beispiel ebenso problemlos wie mit Saxon an der Konsole [Screenshot].

            Möglicherweise liegt es bei Dir an nicht vorhandenen Schreibrechten bei der Ausgabe in eine Datei.

            Es ist übrigens sehr einfach, die Saxon-Version innerhalb von Kernow zu aktualisieren: Im Unterverzeichnis "lib" die Dateien saxon9.jar und saxon9-dom.jar austauschen (aktuell 9.0.0.6).

            Grüße,
            Thomas

            1. Jetzt gehts bei mir auch. Systemneustart und es läuft. Weiß auch nicht was vorher das Problem war.
              Danke für die Hilfe!