Avatar billede sse77 Nybegynder
26. august 2008 - 11:48 Der er 5 kommentarer

EncodedDocument data konvertering

Hej,

jeg sidder med et xml document som indeholder et encoded tiff dokument, og jeg ønsker at kunne omdanne dette encoded tiff data til at kunne vise et billede med mit stylesheet.

Da det er fortrolige oplysninger som jeg arbejder med, kan jeg desværre ikke lige give et eksempel på xml dokumentet, men det stylesheet som bruges laver xml dataen om til en html side, og det skal bruges til at billedet skal vises ved tryk på en knap.

Spørg gerne hvis der er noget at spørge om.

Håber I kan hjælpe mig.
Avatar billede jespertverskov Nybegynder
03. september 2008 - 00:19 #1
Hej

Kan ikke lade sig gøre hverken i standard XSLT 1.0 eller XSLT 2.0, men det kan lade sig gøre ved brug af såkaldte extensions. f.eks. ved at bruge SAXON's XSLT 2.0 processor.

Lad mig vise noget kode jeg lige har tested og som virker. Et jpg billede af mig encoded som base64Binary ligger i en xml fil med kun et element, som vi kalder "binaryData".

Følgende XSLT stylesheet transformerer det encodede image tilbage til en jpg fil og placerer den her C:\test\jesper.jpg. Du skal selvfølgelig også generere HTML med et img element med en src attribut, der peger på billedets placering.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:saxon="http://saxon.sf.net/" xmlns:fos="java.io.FileOutputStream" exclude-result-prefixes="#all">
<xsl:template match="/">   
    <xsl:variable name="img" select="'C:\test\jesper.jpg'"/>
    <xsl:variable name="fos" select="fos:new(string($img))"/>
    <xsl:value-of select="fos:write($fos, saxon:base64Binary-to-octets(xs:base64Binary(binaryData)))"/>   
    <xsl:value-of select="fos:close($fos)"/>   
</xsl:template>
</xsl:stylesheet>

Med venlig hilsen

Jesper Tverskov
http://www.xmlplease.com
Avatar billede sse77 Nybegynder
03. september 2008 - 12:51 #2
Hej,

tak for dit svar. Jeg kan se du bruger java sammen med din extension og det ser rigtig fornuftigt ud, og det eneste problem med løsningen er at den parser som jeg SKAL bruge er xalan, men den har måske også en lignende extension?

Om ikke andet har du ihvertfald ledt mig på rette spor, og det skal du ha' tak for.

med venlig hilsen

Søren
Avatar billede jespertverskov Nybegynder
03. september 2008 - 13:22 #3
Ved ikke om XALAN men hvis du bruger XSLT-classes i et programmeringssprog til at loade XML input fil og XSLT stylesheet, kan du altid convertere base64Binary tilbage til image med programmeringssproget og lade det sende url'en videre til XSLT stylesheet som parameter til src attributten i img elementet i HTML.

Det er "nødløsningen", man altid kan bruge, hvis transformationen foregår via et andet programmeringssprog.

Jesper
Avatar billede jespertverskov Nybegynder
03. september 2008 - 14:16 #4
Lidt mere

SAXON er speciel ved at have sin egen saxon:base64Binary-to-octets()function, og for at tillade JAVA mere eller mindre overalt.

De fleste andre XSLT processors, f.eks. XALAN, har et "script" extension element, der supporterer ét eller flere programmeringssprog.

Så vidt jeg ved, skal du i XALAN bruge et sådant script-element, og kan kun bruge JAVA inde i dette element, dvs. du skal også bruge JAVA til at convertere "base64Binary-to-octets", da XALAN selv mig bekendt ikke har en sådan extension function.

I SAXON er der altså en kombination af en SAXON extension function og så JAVA, i XALAN må du bruge JAVA hele vejen inde i XALANs extension script-element.

Jesper
Avatar billede sse77 Nybegynder
07. september 2009 - 16:53 #5
Hej Jesper,

Det lader til at jeg aldrig fik givet dig point for din fremragende hjælp, hvis du stadig følger denne tråd, så skriv et svar så får du pointene.

mvh

Søren
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester