2017-01-20 16 views
0

Есть ли способ преобразования строки в двоичный base64? Я видел много ссылок, но в конце концов это не сработало. Например, у меня есть этот входной файл:Преобразование строки в двоичный base64

<RootElement xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Data> 
     <Binary> 
       <RawData>This element should convert string to binary base64.</RawData> 
     </Binary> 
    </Data> 
</RootElement> 

Мне нужно создать:

<RootElement xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<Data> 
    <Binary> 
     <RawData>VGhpcyBlbGVtZW50IHNob3VsZCBjb252ZXJ0IHN0cmluZyB0byBiaW5hcnkgYmFzZTY0Lg==</RawData> 
    </Binary> 
</Data> 

Я создал XSLT и использовать пространство имен, что я видел онлайн:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dp="http://www.datapower.com/extensions"> 
<xsl:output method="xml" version="1.0" indent="yes"/> 
<xsl:strip-space elements="*"/> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="RawData"> 
    <xsl:element name="RawData"> 
     <xsl:value-of select="dp:encode(., 'base-64')"/> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

спасибо.

+2

Какой XSLT-процессор? Простое использование пространства имен не делает эти функции доступными. Вы также должны установить библиотеки, которые реализуют пространство имен. Вы не предоставили достаточной информации, чтобы кто-либо мог ответить. –

+0

Это поможет, если вы скажете нам XSLT-процессор и версию XSLT, которые вы используете. Расширение Microsoft MSXSL предоставляет элемент '', который вы можете использовать для определения пользовательских функций в JScript/C#/etc. делать преобразования в ваших данных. – Madeyedexter

+2

Если вы используете процессор Saxon XSLT, вы можете использовать определенную функцию, см. Http://www.saxonica.com/html/documentation/functions/saxon/string-to-base64Binary.html. – potame

ответ

1

Существует чистый XSLT 1.0 решение, которое работает для любого XSLT процессора: JAXP, Saxon, Xalan, Xsltproc, Microsoft:

  1. Скачать base64.xsl
  2. Скачать base64_binarydatamap.xml
  3. Использование XSLT 1.0:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:b64="https://github.com/ilyakharlamov/xslt_base64"> 
    <xsl:output method="xml"/> 
    <xsl:include href="base64.xsl"/> 
    <xsl:template match="@*|node()"> 
        <xsl:copy> 
         <xsl:apply-templates select="@*|node()" /> 
        </xsl:copy> 
    </xsl:template> 
    <xsl:template match="/RootElement/Data/Binary/RawData"> 
        <xsl:call-template name="b64:encode"> 
         <xsl:with-param name="asciiString" select="text()"/> 
        </xsl:call-template> 
    </xsl:template>