Php xslt 1.0 base64对模板的内容进行编码

Php xslt 1.0 base64对模板的内容进行编码,php,xml,xslt,base64,xslt-1.0,Php,Xml,Xslt,Base64,Xslt 1.0,如何使用XSLT1.0在base64中编码模板的内容 编辑:使用序列化模式,在PHP环境中运行 就像我有一个这样的模板: <xsl:template name="test"> <test gender="male" name1="TEST" name2="TEST"> <sometags> <tag></tag> </someta

如何使用XSLT1.0在base64中编码模板的内容

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

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

<xsl:template name="test">
    <test 
      gender="male" 
      name1="TEST" 
      name2="TEST">
      <sometags>
            <tag></tag>
        </sometags>
    </test>
</xsl:template>
<base64>PHRlc3QgDQoJCSAgZ2VuZGVyPSJtYWxlIiANCgkJICBuYW1lMT0iVEVTVCIgDQoJCSAgbmFtZTI9IlRFU1QiPg0KICAgICAgICAgIDxzb21ldGFncz4NCgkJCQk8dGFnPjwvdGFnPg0KCQkJPC9zb21ldGFncz4NCgkJPC90ZXN0Pg==</base64>
<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>

我希望输出是这样的:

<xsl:template name="test">
    <test 
      gender="male" 
      name1="TEST" 
      name2="TEST">
      <sometags>
            <tag></tag>
        </sometags>
    </test>
</xsl:template>
<base64>PHRlc3QgDQoJCSAgZ2VuZGVyPSJtYWxlIiANCgkJICBuYW1lMT0iVEVTVCIgDQoJCSAgbmFtZTI9IlRFU1QiPg0KICAgICAgICAgIDxzb21ldGFncz4NCgkJCQk8dGFnPjwvdGFnPg0KCQkJPC9zb21ldGFncz4NCgkJPC90ZXN0Pg==</base64>
<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>
phrlc3qgdqojcsagz2vuzgvypsjtywxliiancgkjicbuyw1lmt0ivtvgigdqojcsagbmftzti9ilrfu1qipg0kicagicagidxzb21ldgfncz4ncgkjcqk8dgfnpjvdgfnpg0kcqkjpc9zb21ldgfncz4ncgkjpc90zn0pg==
在XSLT1.0中运行的Mukhul Gandhi。如果可以切换到XSLT2.0,则可以创建样式表函数来执行相同的操作

但是,由于您似乎打算将节点编码为字符串,因此不应创建节点,而应创建字符串:

使用(几乎所有XSLT 1.0处理器都支持)重新应用模板的结果,并编写如下内容:

<xsl:template name="test">
    <test 
      gender="male" 
      name1="TEST" 
      name2="TEST">
      <sometags>
            <tag></tag>
        </sometags>
    </test>
</xsl:template>
<base64>PHRlc3QgDQoJCSAgZ2VuZGVyPSJtYWxlIiANCgkJICBuYW1lMT0iVEVTVCIgDQoJCSAgbmFtZTI9IlRFU1QiPg0KICAgICAgICAgIDxzb21ldGFncz4NCgkJCQk8dGFnPjwvdGFnPg0KCQkJPC9zb21ldGFncz4NCgkJPC90ZXN0Pg==</base64>
<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中,您可以使用。

实现同样的效果。我想我找到了另一种方法。这可能行得通,显然您已经有了序列化模式(这不是您的问题)。尽管我的回答显示了一种跨处理器的方法。只有当处理器启用扩展函数并在PHP环境中运行时,您的方法才会起作用。