2014-01-17 48 views
2

我试图从一个属性转换我编码的base64 HTML内容,并将其放置在使用XLST的HTML内容中,希望有人可以提供帮助。如何将base64字符串解码为XSLT中的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

Base64转换不是我通常会推荐在XSLT中执行的操作;字符构建不是XSLT会做得很好的事情。我建议你调用一个扩展函数来完成这个转换。不幸的是,半标准EXSLT扩展集不包含该操作,因此您可能必须自己查找或编写它,然后使用XSLT处理器的API来注册函数,以便样式表可以调用它。 – keshlam

+0

你当然可以用纯XSLT编写它,虽然它会相当复杂,即使你至少知道字节流的编码始终是UTF-8(从基础64获取一个字符串实际上是从基础64获得一个字节流,然后从中获取一个字符串,第二步取决于编码)。 –

回答

1

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

即将在EXPath二进制模块:

http://expath.org/spec/binary

的集装箱:解码-string()函数是你所需要的。我们已经为Saxon实施了这个功能,但它尚未集成到产品中。同时有扩展函数撒克逊:base64BinaryToString这是基本相同的:

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

并且其是在撒克逊-PE可用的或更高。

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

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