Преобразование XML документа в base64 с помощью XSLT 1 - PullRequest
0 голосов
/ 01 августа 2020

Мне нужно преобразовать XML документ в base64 с помощью преобразования XSLT 1.

Я пытался сделать это с помощью этого шаблона: https://github.com/ilyakharlamov/xslt_base64

Вот мой XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:b64="https://github.com/ilyakharlamov/xslt_base64"
  version="1.0">

  <xsl:output method="text" encoding="utf-8" />
  <xsl:strip-space elements="*"/>
  <xsl:include href="base64.xsl"/>
  
  <xsl:template match="/">
  <xsl:call-template name="b64:encode" >
            <xsl:with-param name="asciiString">
              <xsl:copy-of select="." />
            </xsl:with-param>
        </xsl:call-template>
   </xsl:template>

</xsl:stylesheet>

Это работает, но удаляет все теги XML и кодирует только текст. Мне действительно нужно все кодировать (весь документ как есть). Изменение способа вывода на XML не помогает.

1 Ответ

1 голос
/ 01 августа 2020

Основываясь на комментариях Мартина Хоннена, вот как я это сделал:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:b64="https://github.com/ilyakharlamov/xslt_base64"
  version="1.0">
<xsl:import href="xml-to-string.xsl"/>
  <xsl:output method="text" encoding="utf-8" />
  <xsl:strip-space elements="*"/>
  <xsl:include href="base64.xsl"/>
  
  
  <xsl:template match="/">
  <xsl:call-template name="b64:encode" >
            <xsl:with-param name="asciiString">
              <xsl:apply-templates select="." mode="xml-to-string" />
            </xsl:with-param>
        </xsl:call-template>
   </xsl:template>

</xsl:stylesheet>

используя это: http://lenzconsulting.com/xml-to-string/

...