0

XSL を使用して、ブラウザーで電子メール メッセージの XML 表現を表示しています。電子メールの添付ファイルは、メインの電子メール XML ファイルとは別のファイルに保存されるため、電子メールの結果の Web ページに添付ファイルへのリンクを含めたいと考えています。

ただし、一部の添付ファイルは電子メール メッセージ自体であり、転送または返信であった可能性があるため、FW:Importantのようなコロンを含む名前になっている場合があります。名前は FW%3AImportant として URL エスケープされ、 FW%3AImportant.xmlとしてファイルとして保存されます。

問題は、XSL で生成された Web ページの URL がエスケープされておらず、再びコロン ( file://FW:Important.xml ) が含まれているため、リンクが壊れていることです。この動作を停止する最良の方法は何ですか?

XML スニペットは次のとおりです。

<email:part email:filename="FW%3AImportant">
    <email:attachment filename="FW%3AImportant.xml">
        FW%3AImportant.xml
    </email:attachment>
</email:part>

XSL スニペットは次のとおりです。

<xsl:template match="email:email/email:parts">
    <xsl:for-each select="email:part/email:attachment">
        <a>
            <xsl:attribute name="href">
                <xsl:value-of select="@filename" />
            </xsl:attribute>
            <xsl:value-of select="@filename" />
        </a>
    </xsl:for-each>             
</xsl:template>
4

1 に答える 1

0

ここであなたは間違った道を進んでいると思います。URL をアンエスケープするのは XSLT ではなく、ブラウザです。

XML (したがって XSLT) で認識される唯一のエスケープ シーケンスは、" &xxx;" の形式です。URL 文字列の " %xx" は変更されません。

問題は<a href="...">、ブラウザが試行している文字列が正確に含まれていることです。したがって、URL をエンコードするときに何か間違ったことをしています。

ファイルシステム上のファイルが次のように保存されている場合:

FW%3AImportant.xml

その場合、それを参照する正しい URL は次のようになります。

<a href="FW%253AImportant.xml">FW%3AImportant.xml</a>
<!-- ------^^^ the '%' char itself must be escaped! -->

hrefこれは、HTML を生成する他のシステムと同様に、文字列を属性に配置する前に URL エンコードする必要があることを意味します。

残念ながら、XSLT にはネイティブの URL エンコード機能はありません。これは、XSLT 環境の拡張関数を使用するか、XPath 文字列関数を使用して別のテンプレートでエンコードを実行できることを意味します。正しい URL エンコーディングは簡単ではないため、ここで証明されたものを使用することをお勧めします。参照できるスタイルシート ( ) を次に示します<xsl:import>

于 2009-06-18T08:32:27.017 に答える