Tôi đã thấy một số câu hỏi về cách mã hóa tệp hình ảnh trong base64, nhưng cách khác xung quanh - làm cách nào để tái tạo hình ảnh từ chuỗi base64 được lưu trữ trong tệp XML?XSLT: Chuyển đổi dữ liệu base64 thành tệp hình ảnh
<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>
Với nút XML ở trên resource
, làm cách nào để tạo khoảng clip_image001.gif
?
Xin gợi ý:
- bộ xử lý XSLT và/hoặc phần mở rộng cho phép này, cộng với
- một XSLT mẫu mà gây nên các chuyển đổi
Lưu ý rằng nó phải có khả năng xử lý ít nhất GIF & Định dạng tệp PNG. Tốt nhất là không giới hạn ở bất kỳ hệ điều hành nào.
giải pháp thực hiện
Dựa xung quanh giải pháp Mads Hansen's. Sự khác biệt chính là tôi đã tham chiếu net.sf.saxon.value.Base64BinaryValue
trực tiếp trong không gian tên của tôi thay vì sử dụng không gian tên saxon
, bởi vì tôi hiểu các API Java trực quan hơn các mô tả của trang web Saxonica về các chức năng base64Binary-to-octets
và 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. Xem sibling question để tôi triển khai cách lấy các băm cần thiết để xác định các tệp hình ảnh.
Câu hỏi này là câu hỏi con của another question I have asked previously.
Cảm ơn bạn! Đây là những gì tôi muốn, cos nó thực sự viết các hình ảnh vào các tập tin bên ngoài. – bguiz
Tôi nghĩ rằng nó phải là 'saxon: base64Binary-to-octets' (với dấu' s'). Xem http://www.saxonica.com/documentation/extensions/functions.html –
Cảm ơn, Jackem. Tôi đã sửa mẫu mã. –