我正在尝试从属性中转换我编码的 base64 HTML 内容,并使用 XLST 将其放置在 HTML 内容中,希望有人可以提供帮助。
我有这个字符串:
<p><b>Hello!</b><span>This is a span</span></p>
Run Code Online (Sandbox Code Playgroud)
这是 base64 编码的值:
PHA+PGI+SGVsbG8hPC9iPjxzcGFuPlRoaXMgaXMgYSBzcGFuPC9zcGFuPjwvcD4=
Run Code Online (Sandbox Code Playgroud)
XML 数据如下所示:
<Data Get="True">
<Result TextFlow="PHA+PGI+SGVsbG8hPC9iPjxzcGFuPlRoaXMgaXMgYSBzcGFuPC9zcGFuPjwvcD4=">
</Result>
</Data>
Run Code Online (Sandbox Code Playgroud)
我最后一次尝试是使用这个:
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.
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
XSLT 中没有内置功能来执行此操作。
即将推出的是 EXPath 二进制模块:
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)包括 EXPath 二进制模块,作为 Saxon-PE 和更高版本中的标准。