2009-06-18 7 views
0

XSLを使用して、ブラウザに電子メールメッセージのXML表現を表示しています。電子メールの添付ファイルはメインの電子メールXMLファイルとは別のファイルに保存されているため、添付ファイルへのリンクが電子メールに表示されます。XSLアンエスケープURLを停止する方法

添付ファイルの一部は電子メールメッセージそのものであり、転送または返信された可能性があり、したがってFW:重要のようなコロンを含む名前を持つ可能性があります。名前は、FW%3AI重要なファイル(FW%3AImportant.xml)としてURLエスケープされています(ファイル名は)。

問題は、XSLで生成されたWebページのURLがエスケープされていないことと、コロン(ファイル:// 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> 

答えて

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! --> 

これは、あなたが文字列をエンコードしURLしなければならないことを意味href属性に配置する前に、HTMLを生成する他のシステムと同じようにしてください。

残念ながら、XSLTにはネイティブのURLエンコード機能はありません。つまり、XSLT環境の拡張機能を使用することも、XPath文字列関数を使用して別のテンプレートでエンコードすることもできます。正しいURLエンコーディングはまったく些細なものではないので、ここで実証されたものを使用することをお勧めします。ここであなたのために参照できるスタイルシート(<xsl:import>)があります。http://skew.org/xml/stylesheets/url-encode/

+0

それは意味があります、私はそれを行こうと思います。私はすでにそのスタイルシートを見ていましたが、もっと簡単な答えを期待していました! – jwaddell

関連する問題