如何在XSLT中将base64字符串解码为HTML内容?

时间:2014-01-17 00:15:06

标签: html xml xslt

我正在尝试从属性转换我编码的base64 HTML内容,并使用XLST将其放在HTML内容中,希望有人可以提供帮助。

我有这个字符串:

<p><b>Hello!</b><span>This is a span</span></p>

这是base64编码的值:

PHA+PGI+SGVsbG8hPC9iPjxzcGFuPlRoaXMgaXMgYSBzcGFuPC9zcGFuPjwvcD4=

XML数据如下所示:

<Data Get="True">
    <Result TextFlow="PHA+PGI+SGVsbG8hPC9iPjxzcGFuPlRoaXMgaXMgYSBzcGFuPC9zcGFuPjwvcD4=">
        </Result>
</Data>

我的最后一次尝试是使用this

fn:cast($XML/Data/Result/@TextFlow,'xs:base64Binary','xs:String',false())

That code send this error:
Unknown function - Name and number or arguments do not match any function signature in the static context.

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

XSLT中没有内置功能来执行此操作。

即将推出的是EXPath二进制模块:

http://expath.org/spec/binary

bin:decode-string()函数是你需要的。我们已经为Saxon实现了这个功能,但它还没有集成到产品中。同时还有扩展函数saxon:base64BinaryToString,它本质上是相同的:

http://www.saxonica.com/documentation/index.html#!functions/saxon/base64Binary-to-string

可在Saxon-PE或更高版本中使用。

两个函数都采用xs:base64Binary类型的参数;要将base64中的字符串转换为此类型的值,请使用构造函数xs:base64Binary(string)。这当然需要XSLT 2.0。

如果您的(已解码)字符串包含标记,则要将其复制到序列化HTML输出,您需要使用不推荐的disable-output-escaping =“yes”选项。

更新(2019年4月)

Saxon的最新版本(当前版本为9.9)包括作为Saxon-PE和更高版本标准的EXPath二进制模块。