xslt 1.0 base64 编码模板的内容
xslt 1.0 base64 encode the content of a template
如何使用 XSLT 1.0 在 base64 中对模板内容进行编码?
编辑:使用序列化模式,在PHP环境下运行
好像我有这样一个模板:
<xsl:template name="test">
<test
gender="male"
name1="TEST"
name2="TEST">
<sometags>
<tag></tag>
</sometags>
</test>
</xsl:template>
我希望输出是这样的:
<base64>PHRlc3QgDQoJCSAgZ2VuZGVyPSJtYWxlIiANCgkJICBuYW1lMT0iVEVTVCIgDQoJCSAgbmFtZTI9IlRFU1QiPg0KICAgICAgICAgIDxzb21ldGFncz4NCgkJCQk8dGFnPjwvdGFnPg0KCQkJPC9zb21ldGFncz4NCgkJPC90ZXN0Pg==</base64>
Mukhul Gandhi created a Base64 encoder 在 XSLT 1.0 中运行。如果可以切换到 XSLT 2.0,则可以创建样式表函数来执行相同的操作。
但是,因为您的意思似乎是将节点编码为字符串,所以您不应该创建节点,而应该创建字符串:
使用 node-set
extension function((几乎?)所有 XSLT 1.0 处理器都支持)重新应用模板的结果,并编写如下内容:
<xsl:template match="*">
<xsl:text><</xsl:text>
<xsl:value-of select="name()" />
<xsl:apply-templates select="@*" />
<xsl:text>></xsl:text>
<xsl:apply-templates />
<xsl:text></</xsl:text>
<xsl:value-of select="name()" />
<xsl:text>></xsl:text>
</xsl:template>
<xsl:template match="@*">
<xsl:text> </xsl:text>
<xsl:value-of select="name()" />
<xsl:text>="</xsl:text>
<xsl:value-of select="." />
<xsl:text>"</xsl:text>
</xsl:template>
注意:未测试,您可能希望对其进行扩展以添加缩进、处理其他节点(如处理指令和注释)以及在属性的情况下转义字符串中的任何引号。
在 XSLT 3.0 中,您可以使用 fn:serialize
function 实现相同的效果。
如何使用 XSLT 1.0 在 base64 中对模板内容进行编码?
编辑:使用序列化模式,在PHP环境下运行
好像我有这样一个模板:
<xsl:template name="test">
<test
gender="male"
name1="TEST"
name2="TEST">
<sometags>
<tag></tag>
</sometags>
</test>
</xsl:template>
我希望输出是这样的:
<base64>PHRlc3QgDQoJCSAgZ2VuZGVyPSJtYWxlIiANCgkJICBuYW1lMT0iVEVTVCIgDQoJCSAgbmFtZTI9IlRFU1QiPg0KICAgICAgICAgIDxzb21ldGFncz4NCgkJCQk8dGFnPjwvdGFnPg0KCQkJPC9zb21ldGFncz4NCgkJPC90ZXN0Pg==</base64>
Mukhul Gandhi created a Base64 encoder 在 XSLT 1.0 中运行。如果可以切换到 XSLT 2.0,则可以创建样式表函数来执行相同的操作。
但是,因为您的意思似乎是将节点编码为字符串,所以您不应该创建节点,而应该创建字符串:
使用 node-set
extension function((几乎?)所有 XSLT 1.0 处理器都支持)重新应用模板的结果,并编写如下内容:
<xsl:template match="*">
<xsl:text><</xsl:text>
<xsl:value-of select="name()" />
<xsl:apply-templates select="@*" />
<xsl:text>></xsl:text>
<xsl:apply-templates />
<xsl:text></</xsl:text>
<xsl:value-of select="name()" />
<xsl:text>></xsl:text>
</xsl:template>
<xsl:template match="@*">
<xsl:text> </xsl:text>
<xsl:value-of select="name()" />
<xsl:text>="</xsl:text>
<xsl:value-of select="." />
<xsl:text>"</xsl:text>
</xsl:template>
注意:未测试,您可能希望对其进行扩展以添加缩进、处理其他节点(如处理指令和注释)以及在属性的情况下转义字符串中的任何引号。
在 XSLT 3.0 中,您可以使用 fn:serialize
function 实现相同的效果。