我正在尝试从属性转换我编码的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.
感谢您的帮助!
答案 0 :(得分:3)
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)包括作为Saxon-PE和更高版本标准的EXPath二进制模块。