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:" -->
<xsl:value-of
select="concat(
'file:',
replace(
iri-to-uri(
replace(
replace(
replace($filepath, '\\', '/'),
'%',
'%25'),
'#',
'%23')),
'^([A-Za-z]):',
'///$1:'))"/>
</xsl:function>
This conforms to the rules stated in the IEBlog post "File URIs in
Windows" [1]. Suggestions for improvements on the function are welcome.
Yves
[1] http://blogs.msdn.com/ie/archive/2006/12/06/file-uris-in-windows.aspx
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--