2009-06-18 5 views
0

XSL의 이스케이프 취소 된 URL을 중지하는 방법을 참조하십시오. 이메일 첨부 파일은 기본 이메일 XML 파일을 별도의 파일에 저장되고, 그래서 이메일 첨부 파일에 대한 링크를 포함 할 결과 웹 페이지를합니다.내가 브라우저에서 이메일 메시지의 XML 표현을 표시 XSL을 사용하고

그러나 첨부 파일 중 일부는 전자 메일 메시지이므로 전달 또는 회신 일 수 있으므로 FW : 중요 같은 콜론이 포함 된 이름이있을 수 있습니다. 이름은 URL 이스케이프 FW %의 3AImportant로하고, FW %의 3AImportant.xml 같은 파일로 저장됩니다.

내 XSL에서 생성 된 웹 페이지의 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> 

답변

0

난 당신이 여기에 잘못된 궤도에 생각합니다. URL을 이스케이프 처리하지 않는 XSLT가 아니라 브라우저입니다. (따라서 XSLT에) XML 공지

유일한 이스케이프 시퀀스 "&xxx;"의 형태이다. URL 문자열의 "%xx"은 변경되지 않습니다.

문제는 <a href="..."> 브라우저가 함께 노력하고 정확하게 문자열이 들어 있다는 것입니다. 그래서 당신은 URL을 인코딩 할 때 잘못된 것을하고 있습니다. 파일 시스템에 파일이 저장 될 때

: 다음

FW%3AImportant.xml

참조 할 수있는 올바른 URL이 있어야합니다 :이 문자열을 URL 인코딩 의미

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

당신이 href 속성에 배치하기 전에, 단지 HTML을 생성하는 다른 시스템에 좋아한다.

불행히도 XSLT에는 기본 URL 인코딩 기능이 없습니다. 즉, XSLT 환경의 확장 함수를 사용하거나 XPath 문자열 함수를 사용하여 별도의 템플릿에서 인코딩을 수행 할 수 있습니다. 올바른 URL 인코딩은 매우 사소한 것이 아니기 때문에 여기서 입증 된 것을 사용하는 것이 좋습니다. 여기에 참조 할 수있는 스타일 시트 (<xsl:import>)가 있습니다 : http://skew.org/xml/stylesheets/url-encode/

+0

그건 의미있는 일입니다. 이미 스타일 시트를보고 있었지만 간단한 대답을 원했습니다! – jwaddell

관련 문제