Widziałem kilka pytań na temat kodowania pliku obrazu w base64, ale jak na odwrót - jak mogę odtworzyć obraz z łańcucha base64 przechowywanego w pliku XML?XSLT: Konwertuj dane base64 na pliki obrazów
<resource>
<data encoding="base64">
R0lGODlhEAAQAPMAMcDAwP/crv/erbigfVdLOyslHQAAAAECAwECAwECAwECAwECAwECAwECAwEC
AwECAyH/C01TT0ZGSUNFOS4wGAAAAAxtc09QTVNPRkZJQ0U5LjAHgfNAGQAh/wtNU09GRklDRTku
MBUAAAAJcEhZcwAACxMAAAsTAQCanBgAIf8LTVNPRkZJQ0U5LjATAAAAB3RJTUUH1AkWBTYSQXe8
fQAh+QQBAAAAACwAAAAAEAAQAAADSQhgpv7OlDGYstCIMqsZAXYJJEdRQRWRrHk2I9t28CLfX63d
ZEXovJ7htwr6dIQB7/hgJGXMzFApOBYgl6n1il0Mv5xuhBEGJAAAOw==
</data>
<mime>image/gif</mime>
<resource-attributes>
<file-name>clip_image001.gif</file-name>
</resource-attributes>
</resource>
Mając na uwadze powyższą węzeł XML resource
, w jaki sposób przejść o tworzeniu clip_image001.gif
?
Proszę zaproponować:
- procesory XSLT i/lub rozszerzenia Włącz tę plus
- XSLT próbka, która wyzwala konwersji
Należy pamiętać, że musi on być w stanie obsłużyć co najmniej GIF & PNG formaty plików. Korzystnie nie ogranicza się do żadnego systemu operacyjnego.
Wdrożone rozwiązanie
oparciu wokół Mads Hansen's rozwiązania. Główną różnicą jest to, że odwoływałem się do net.sf.saxon.value.Base64BinaryValue
bezpośrednio w mojej przestrzeni nazw, zamiast korzystać z przestrzeni nazw saxon
, ponieważ intuicyjnie zrozumiałem interfejsy API języka Java niż opisy funkcji witryn Saxonica w zakresie funkcji base64Binary-to-octets
i base64Binary
.
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:b64="net.sf.saxon.value.Base64BinaryValue"
xmlns:fos="java.io.FileOutputStream"
...
exclude-result-prefixes="b64 fos">
...
<xsl:for-each select="resource">
<xsl:variable name="b64" select="b64:new(string(data))"/>
...
<xsl:variable name="fos" select="fos:new(string($img))"/>
<xsl:value-of select="fos:write($fos, b64:getBinaryValue($b64))"/>
<xsl:value-of select="fos:close($fos)"/>
</xsl:for-each>
...
P.S. Zobacz sibling question dla mojej realizacji, w jaki sposób uzyskać hashe niezbędne do identyfikacji plików graficznych.
To pytanie jest podpytaniem w języku angielskim: another question I have asked previously.
Dziękujemy! To właśnie chciałem, bo to jest pisanie obrazów do plików zewnętrznych. – bguiz
Myślę, że powinno to być 'saxon: base64Binary-to-octets' (z końcowym' s''). Zobacz http://www.saxonica.com/documentation/extensions/functions.html –
Dzięki, Jackem. Poprawiłem próbkę kodu. –