xslt 1.0 base64 кодирует содержимое шаблона

Как я могу кодировать содержимое шаблона в base64, используя XSLT 1.0?

Редактирование: использование режима сериализации, запуск в среде PHP

Как будто у меня есть такой шаблон:

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

и я хочу, чтобы вывод был таким:

<base64>PHRlc3QgDQoJCSAgZ2VuZGVyPSJtYWxlIiANCgkJICBuYW1lMT0iVEVTVCIgDQoJCSAgbmFtZTI9IlRFU1QiPg0KICAgICAgICAgIDxzb21ldGFncz4NCgkJCQk8dGFnPjwvdGFnPg0KCQkJPC9zb21ldGFncz4NCgkJPC90ZXN0Pg==</base64>

3

Решение

Мухул Ганди создал кодировщик Base64 который работает в XSLT 1.0. Если вы можете переключиться на XSLT 2.0, вы можете создать функции таблицы стилей, чтобы сделать то же самое.

Однако, поскольку вы, похоже, хотите закодировать узлы в строки, вы не должны создавать узлы, а вместо этого строки:

Повторно примените результат вашего шаблона, используя node-set функция расширения (поддерживается (почти?) всеми процессорами 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 функция.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]