【问题标题】:How to decode base64 string as HTML content in XSLT?如何在 XSLT 中将 base64 字符串解码为 HTML 内容?
【发布时间】:2014-02-06 04:09:24
【问题描述】:

我正在尝试将我的编码 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.

感谢您的帮助!

【问题讨论】:

  • Base64 转换不是我通常建议在 XSLT 中进行的; XSLT 不能很好地构建字符的位旋转构造。我建议你调用一个扩展函数来进行转换。不幸的是,半标准的 EXSLT 扩展集不包含该操作,因此您可能必须自己查找或编写它,然后使用 XSLT 处理器的 API 注册该函数,以便您的样式表可以调用它。
  • 你当然可以用纯 XSLT 编写它,尽管它会相当复杂,即使你至少知道字节流的编码总是 UTF-8(从 base 64 获取字符串真的很一个来自 base 64 的字节流,然后从中获取一个字符串,第二步取决于编码)。

标签: html xml xslt


【解决方案1】:

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 二进制模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2021-07-24
    • 2019-07-02
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多