XSLT Escape Character не работает - PullRequest
0 голосов
/ 26 марта 2012

Я пытаюсь использовать escape-символы в моем текстовом выводе, так как я бы тоже хотел заключить вывод в теги emailData.Я использую

<xsl:text>&#60;emailData&#62;</xsl:text>

В XSLT, чтобы убедиться, что это работает, однако, потому что я использую инструмент под названием Cast Iron по какой-то причине, он не конвертирует &#60; в < и просто выплевывает &lt;emailData>

Вы можете видеть его изображение ЗДЕСЬ , которое иллюстрирует вывод, который я получаю.Мой исходный код такой.Как еще можно обернуть это в теги emailData?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>

    <xsl:template match="header">
        <xsl:text>&#60;emailData&#62;</xsl:text>
        <xsl:text>&#10;</xsl:text>
        <xsl:text>From: </xsl:text>
        <xsl:value-of select="from/text()"/>
        <xsl:text>&#10;</xsl:text>
        <xsl:text>To: </xsl:text>
        <xsl:value-of select="to/text()"/>
        <xsl:text>&#10;</xsl:text>
        <xsl:text>Subject: </xsl:text>
        <xsl:value-of select="subject/text()"/>
        <xsl:text>&#10;</xsl:text>
        <xsl:text>Content-Type: </xsl:text>
        <xsl:value-of select="contentType/text()"/>
        <xsl:text>&#10;</xsl:text>
        <xsl:text>  boundary="</xsl:text>
        <xsl:value-of select="boundary/text()"/>
        <xsl:text>"</xsl:text>
        <xsl:text>&#10;</xsl:text>
        <xsl:text>MIME-Version: </xsl:text>
        <xsl:value-of select="mimeVersion/text()"/>
    </xsl:template>

    <xsl:template match="email">
        <xsl:text>&#10;&#10;</xsl:text>
        <xsl:text>--</xsl:text>
        <xsl:value-of select="../header/boundary/text()"/>
        <xsl:text>&#10;</xsl:text>
        <xsl:text>Content-Type: </xsl:text>
        <xsl:value-of select="contentTypeBody/text()"/>
        <xsl:text> charset="us-ascii"</xsl:text>
        <xsl:text>&#10;</xsl:text>
        <xsl:text>Content-Transfer-Encoding: </xsl:text>
        <xsl:value-of select="contentTransfer/text()"/>
        <xsl:text>&#10;&#10;</xsl:text>
        <xsl:value-of select="body/text()"/>
    </xsl:template>

    <xsl:template match="Attachment">
        <xsl:for-each select="Attachments">
            <xsl:text>&#0010;&#0010;</xsl:text>
            <xsl:value-of select="../../header/boundary/text()"/>
            <xsl:text>&#10;</xsl:text>
            <xsl:text>Content-Type: </xsl:text>
            <xsl:value-of select="attachmentContentType/text()"/>
            <xsl:text> name="</xsl:text>
            <xsl:value-of select="attachmentDescription/text()"/>
            <xsl:text>"</xsl:text>
            <xsl:text>&#10;</xsl:text>
            <xsl:text>Content-Description: </xsl:text>
            <xsl:value-of select="attachmentDescription/text()"/>
            <xsl:text>&#10;</xsl:text>
            <xsl:text>Content-Disposition: attachment; filename="</xsl:text>
            <xsl:value-of select="atachementDisposition/text()"/>
            <xsl:text>"</xsl:text>
            <xsl:text>&#10;</xsl:text>
            <xsl:text>Content-Transfer-Encoding: </xsl:text>
            <xsl:value-of select="attachmentContentTransfer/text()"/>
            <xsl:text>&#10;&#10;</xsl:text>
            <xsl:value-of select="attachementBody/text()"/>
            <xsl:text>&#10;</xsl:text>
            <xsl:text>&#60;/emailData&#62;</xsl:text>
        </xsl:for-each>
    </xsl:template>

    <xsl:template match="text()"/>

</xsl:stylesheet>

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Я бы генерировал XML напрямую, а не XML-кодированный текст, поэтому

изменил бы

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>

    <xsl:template match="header">
        <xsl:text>&#60;emailData&#62;</xsl:text>

на

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml"/>

   <xsl:template match="/"><emailData><xsl:apply-templates/></emailData></xsl:template>

    <xsl:template match="header">
       <!-- <xsl:text>&#60;emailData&#62;</xsl:text>-->
0 голосов
/ 26 марта 2012

добавьте disable-output-escaping = "yes" к вашим <xsl:text> элементам:

<xsl:text disable-output-escaping="yes">&#60;...&#62;</xsl:text>

будет отображаться как

<...>

...