【问题标题】:XSLT document() function with escaped chars in file name文件名中带有转义字符的 XSLT document() 函数
【发布时间】:2013-07-17 21:11:47
【问题描述】:

正在使用带有转义字符的文件名解析 XML。这是服务器上的文件名:
Account-V%29%27%22%3B%3A%3E.layout

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

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

由于无法在服务器上找到此文件,因此出现错误:
Account-V)'";:>.layout

有没有办法告诉 document() 函数不要转换文件中的转义字符?我尝试将其包装在变量周围,但没有奏效。

【问题讨论】:

    标签: file xslt escaping document chars


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      所以我认为不了解您的 XSLT 处理器就无法回答这个问题。

      【讨论】:

      • 嗨 Michael,这是运行在 tomcat 上的 Apache Xalan。在 windows 上开发的操作系统,将在生产中运行在 linux 上。感谢您的帮助。
      • 找到了一个可行的解决方法。不是最漂亮的,但是在执行 XSLT 之前,在 Java 中做一个字符串来替换,例如 fileNames.replace("%","%25") 这会强制 document() 函数将百分号转义为百分号,从而在服务器上生成正确的文件名。所以 %252E 在文档功能之后变成 %2E 。打算离开一两天无人回答,看看是否有人有更好的东西。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-02-21
        • 2018-06-05
        • 2014-01-07
        • 1970-01-01
        • 1970-01-01
        • 2018-12-21
        • 2011-09-15
        • 2014-10-10
        • 1970-01-01
        相关资源
        最近更新 更多