2016-10-20 9 views
0

У меня есть данные XML, извлеченные из устаревшего приложения Lotus Notes. XML имеет встроенные двоичные данные. Я предполагаю, основываясь на информации на веб-сайте IBM Lotus Notes, что он закодирован в формате base64, но я не уверен в этом. Некоторые двоичные данные выглядят как изображения, в то время как некоторые из них, как представляется, являются встроенными документами MS Word. Я использую Saxon XSLT-процессор. Как я могу декодировать эти двоичные данные с помощью XSLT?Как декодировать двоичные данные, встроенные в XML, используя XSLT?

Данные выглядит примерно так:

<objectref version='2' name='EXT12682' class='Word.Document.8' 
    displayformat='metafile' description='Microsoft Word Document' classid='{00020906-0000-0000-c000-000000000046}' 
    storageformat='structstorage'><picture height='289px' width='625px' scaledheight='3.0104in' 
     scaledwidth='6.5104in'><notesbitmap>illegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygook</notesbitmap></picture></objectref> 


<file hosttype='bytearraypage' 
    compression='none' flags='storedindoc' name='STG12172'> 
    <created><datetime dst='true'>20080924T171730,05-04</datetime></created> 
    <modified><datetime dst='true'>20080924T171730,05-04</datetime></modified><filedata>illegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygookillegiblegobbledygook</filedata></file> 
+0

Коммерческие издания Saxon имеют определенную поддержку для обработки данных с кодировкой base64, см. функции 'base64Binary-to-string/octets', документированные на http://saxonica.com/html/documentation/ функции/саксонской /. Существует также http://saxonica.com/html/documentation/functions/expath%2Dbinary/ модуль. –

+0

Спасибо за информацию ... Похоже, мне еще нужен дополнительный шаг, чтобы просмотреть результат как изображение или документ Word. – b00kgrrl

ответ

0

Последние выпуски Saxon (PE и EE), включают в себя реализацию бинарного модуля EXPath (http://expath.org/spec/binary), который содержит все, что вам нужно манипулировать двоичные данные - за исключением конечно, спецификация двоичных данных, которые вы хотите манипулировать. Если вы знаете, что такое структура ввода, и если вы знаете, какой должен быть результат вывода, который вы хотите создать, то двоичные функции вам помогут, но я боюсь, что вы не уверены в своем вопросе.

Если вы считаете, что двоичные данные представляют собой, например, файл JPEG с кодировкой base64, то на самом деле вам не нужен бинарный модуль EXPath - модуль файлов EXPath (также реализованный в Saxon PE и EE) должен быть достаточно. См http://expath.org/spec/file#fn.write-binary

Вы можете сделать:

file:write-binary("output.jpeg", xs:base64Binary(jpegBitMap)) 

записать содержимое двоичного элемента в качестве внешнего файла, а затем вы можете попытаться открыть файл с помощью приложения, понимающего соответствующего формата.

(Будьте осторожны с этими методами, потому что они имеют побочные эффекты, которые не очень хорошо вписываются в XQuery или XSLT. Например, не пытайтесь вызвать их в инициализаторе переменной, который не будет вызван, если переменная никогда не используется.)

+0

Спасибо! Хотя я все еще немного смущен тем, что каждый XML-файл может иметь несколько встроенных двоичных объектов. Означает ли это, что каждый внедренный объект должен быть записан в отдельный файл? – b00kgrrl

+0

Мы не знаем, что вы хотите делать с данными, так как мы можем сказать? –