在XSLT中加载二进制文件 - base64编码

时间:2015-05-05 07:09:30

标签: saxon

我们需要加载一个二进制文件,base64对文件进行编码,包括输出中的结果。二进制文件放在服务器上,只能通过URI访问。

我编写了下面的XSLT脚本,但它只适用于可通过文件系统访问的文件。如果我插入URI而不是文件路径我自然会收到错误:URI方案不是' file'。

有人能告诉我如何使这段代码适用于URI吗?

<xsl:stylesheet version="2.0" xmlns:java="java"     xmlns:file="http://expath.org/ns/file" xmlns:saxon="http://saxon.sf.net/" xmlns:bin="http://expath.org/spec/binary" 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" xpath-default-namespace="http://rep.evenex.dk/schema/evenex/eBusiness_01">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
    <xsl:variable name="tiffPath">
        <xsl:value-of select="'C:/CGI_tiff_files/165238_EM37010002609.tiff'"/>
        <!--<xsl:value-of select="'https://www.dropbox.com/s/htw5ckxjfepye0y/altova.gif?dl=0'"/>-->
    </xsl:variable>
    <xsl:variable name="tiffBas64encoded">
        <xsl:value-of select="file:read-binary($tiffPath)"/>
    </xsl:variable>
    <!--Tiff vars end-->
    <xsl:element name="root">
        <xsl:element name="base64EncodeTiff">
            <xsl:attribute name="path"><xsl:value-of select="$tiffPath"/></xsl:attribute>
            <xsl:value-of select="$tiffBas64encoded"/>
        </xsl:element>
    </xsl:element>
</xsl:template>

2 个答案:

答案 0 :(得分:1)

对于下一个Saxon版本,我已经实现了扩展功能以满足此要求。我在

发布了代码

https://saxonica.plan.io/issues/2369

如果您愿意,可以将其合并到您的申请中。

答案 1 :(得分:0)

如果不编写自己的Java扩展函数,我认为没有办法做到这一点。