xslt 1.0 base64编码模板的内容

时间:2015-08-13 10:59:28

标签: php xml xslt base64 xslt-1.0

如何使用XSLT 1.0在base64中编码模板的内容?

编辑:使用序列化模式,在PHP环境中运行

就像我有一个这样的模板:

from nanomsg import Socket, SUB

s = Socket(SUB)
s.connect('tcp://localhost:8080')
s.set_string_option(SUB, SUB_SUBSCRIBE, "topic")
while True:
    print(s.recv())

我希望输出如下:

<xsl:template name="test">
    <test 
      gender="male" 
      name1="TEST" 
      name2="TEST">
      <sometags>
            <tag></tag>
        </sometags>
    </test>
</xsl:template>

1 个答案:

答案 0 :(得分:1)

在XSLT 1.0中运行的Mukhul Gandhi created a Base64 encoder。如果可以切换到XSLT 2.0,则可以创建样式表函数来执行相同的操作。

但是,因为您似乎意味着将节点编码为字符串,所以不应该创建节点,而应该创建字符串:

使用node-set extension function((几乎?)所有XSLT 1.0处理器支持)重新应用模板的结果,并写下这样的内容:

<xsl:template match="*">
    <xsl:text>&lt;</xsl:text>
    <xsl:value-of select="name()" />
    <xsl:apply-templates select="@*" />
    <xsl:text>&gt;</xsl:text>
    <xsl:apply-templates />
    <xsl:text>&lt;/</xsl:text>
    <xsl:value-of select="name()" />
    <xsl:text>&gt;</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实现相同的目标。