XSLT document()函数,文件名中包含转义字符

时间:2013-07-17 21:11:47

标签: file xslt escaping document chars

使用包含转义字符的文件名解析XML。这是服务器上的文件名:
帐户-V%29%27%22%3B%3A%3E.layout

当我应用文档功能时,它会自动转换转义字符。

`<xsl:apply-templates select="document('Account-V%29%27%22%3B%3A%3E.layout')/Layout"/>

以上产生错误,因为它无法在服务器上找到此文件:
帐户-V)'“;产品:&gt; .layout

有没有办法告诉document()函数不转换文件中的转义字符?我尝试围绕变量包装它,但它不起作用。

3 个答案:

答案 0 :(得分:0)

如果您使用的是XSLT 2.0,请尝试使用encode-for-uri()

select="document(encode-for-uri('Account-V%29%27%22%3B%3A%3E.layout'))/Layout"

答案 1 :(得分:0)

传递给document()函数的URI被取消引用的方式在很多方面都是实现定义的,许多XSLT处理器可以让您对它进行一些控制,例如允许您提供用户编写的URIResolver。

所以我不认为在不知道你的XSLT处理器的情况下可以回答这个问题。

答案 2 :(得分:0)

找到一个可行的解决方法。不是最漂亮的,但在执行XSLT之前,在Java中执行一个字符串替换,例如fileNames.replace(“%”,“%25”)这会强制document()函数将百分号转义为百分比,这会在服务器上生成正确的文件名。