[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] XSLT 2: File path to URI for non-XML file

Subject: Re: [xsl] XSLT 2: File path to URI for non-XML file
From: Yves Forkl <Y.Forkl@xxxxxx>
Date: Wed, 08 Oct 2008 14:12:32 +0200

Martin Honnen wrote:
Yves Forkl wrote: [...]
How can I "convert" the file path of the CSS file (i.e. $css_file) into a URI, given that the XSLT stylesheet is not located in the same directory? Functions targeting the URI of source document nodes won't help me much either, I fear.

The href attribute of xsl:result-document takes a URI reference (relative or absolute) so I am not sure where the problem is, is your variable value not simply a relative file URI?. If you want/need to resolve relative URIs then use http://www.w3.org/TR/xpath-functions/#func-resolve-uri

Sorry, I missed the fact that xsl:result-document needs a URI reference, so I need to convert my Windows file path already before.

Here is the function I came up with, which will convert an absolute Windows file path into a URI:

<xsl:function name="my:windowsfilepath_to_uri" as="xs:string">
  <xsl:param name="filepath" as="xs:string"/>
  <!-- Conversion steps:
       1) replace backslashes with slashes
       2) encode percent sign
       3) percent-encode URI fragment identifier character
       4) percent-encode characters illegal in URIs, using iri-to-uri
       5) add three slashes before drive letter
       6) prefix result with "file:" -->
                      replace($filepath, '\\', '/'),

This conforms to the rules stated in the IEBlog post "File URIs in Windows" [1]. Suggestions for improvements on the function are welcome.


[1] http://blogs.msdn.com/ie/archive/2006/12/06/file-uris-in-windows.aspx

Current Thread