编码包含标签的xslt变量的内容

时间:2014-08-12 08:29:36

标签: xslt base64 xslt-2.0

我希望在将SOAP请求发送到服务器之前对其进行编码。 textToBase64是库中的自定义函数。

<xsl:value-of select="codecs:textToBase64($MyRequest)"/>

然而textTobase64函数的输出会截断标记并仅对数据进行编码。

  1. 如何将变量转换为字符串 OR
  2. 告诉函数不要剥离标记。
  3. 变量是一个结果树片段,如

    <xsl:variable name="MyRequest">
     <soap:ENVELOPE>
      <!--....-->
     </soap:ENVELOPE>
    </variable>
    

2 个答案:

答案 0 :(得分:2)

如果你真的使用像Saxon 9这样的XSLT 2.0处理器,那么创建的变量为

<xsl:variable name="MyRequest">
 <soap:ENVELOPE>
  <!--....-->
 </soap:ENVELOPE>
</variable>

不是结果树片段,因为XSLT 2.0中没有结果树片段,它只是一个临时文档树。如果要将文档树序列化为带有标记的字符串,则必须考虑使用Saxon 9的商业版本,因为它们在XSLT 2.0中提供了扩展函数http://www.saxonica.com/documentation/index.html#!functions/saxon/serialize或内置函数{{3}在XSLT 3.0中你可以分别使用codecs:textToBase64(saxon:serialize($myRequest, 'someOutputName')) codecs:textToBase64(serialize($myRequest)),或者你需要在XSLT中分别编写序列化使用库,就像http://www.saxonica.com/documentation/index.html#!functions/fn/serialize一样。

答案 1 :(得分:0)

(Martin Honnen已经给出了一个非常有用的答案 - 你应该接受它。我想补充一些东西。)

也许值得一提的是textToBase64除了简单的字符串之外不能处理任何其他内容。如果传递包含临时文档的变量,则很可能编码所有文本节点的串联。

  

然而textTobase64函数的输出会截断标签和   仅对数据进行编码。

该功能并不完全&#34;截断&#34;标签,标签的概念是XSLT处理器所不知道的。换句话说,它将元素视为<x>(其中&#34; x&#34;是元素名称),但作为元素节点,是抽象实体。只是这个函数不希望元素节点作为参数。