我希望在将SOAP请求发送到服务器之前对其进行编码。 textToBase64是库中的自定义函数。
<xsl:value-of select="codecs:textToBase64($MyRequest)"/>
然而textTobase64函数的输出会截断标记并仅对数据进行编码。
变量是一个结果树片段,如
<xsl:variable name="MyRequest">
<soap:ENVELOPE>
<!--....-->
</soap:ENVELOPE>
</variable>
答案 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;是元素名称),但作为元素节点,是抽象实体。只是这个函数不希望元素节点作为参数。