【问题标题】:Escaping URI paths with XSLT使用 XSLT 转义 URI 路径
【发布时间】:2011-11-05 02:17:05
【问题描述】:

我正在从事一个数据聚合项目,我需要将来自各种数据提供者的 XML 数据转换为一种通用格式,这需要正确转义数据集中的所有 URI 值。这是我从数据提供者那里收到的示例 URI。它在其路径组件中包含保留字符(“[”、“]”):

http://ogimages.bl.uk/images/001/001ROY000018D03U00107000[SVC1].jpg

这是我需要的转义形式:

http://ogimages.bl.uk/images/001/001ROY000018D03U00107000%5BSVC1%5D.jpg

我计划使用 XSLT 和 EXSLT encode-uri 函数 (http://www.exslt.org/str/functions/encode-uri/str.encode-uri.html) 在转换时转义 URI。目前我使用如下:

xsl:value-of select="str:encode-uri(., true())"/>

转义完整的 URI 并导致

http%3A%2F%2Fogimages.bl.uk%2Fimages%2F001%2F001ROY000018D03U00107000%5BSVC1%5D.jpg

这不是我需要的,因为如果 URI 保留字符位于正确的位置,我想保留它们。

如果我按如下方式使用 encode-uri 函数

xsl:value-of select="str:encode-uri(., false())"/>

括号不会被转义,因为 encode-uri 函数在使用布尔 false 标志调用时不会转义保留字符。

所以我想,我需要在 URI 的各个路径组件上应用 URI 编码。是否有任何现有功能或者我需要在 XSL(T) 中开始 URI 解析?

谢谢

【问题讨论】:

    标签: xml xslt encoding uri


    【解决方案1】:

    我认为你需要开始 URI 解析。

    原因是您的数据提供者将具有特殊含义的保留字符(例如 / 作为路径组件分隔符)与没有特殊含义且需要转义的保留字符(例如 [ )。 encode-uri() 函数怎么会知道哪些要逃走,哪些不去管?

    所以是的,您需要开始解析 URI。如果您确信没有需要转义的 / 字符,我会

    • 复制初始的http(s):// 原样
    • 使用 EXSLT 的 tokenize() 将其余部分通过 / 分解为路径组件
    • encode-uri() 每个组件
    • 和他们一起回到/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-09
      • 2012-11-19
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      相关资源
      最近更新 更多