1

我有一组来自 Solr 的记录,其中field[@name='url']可以具有以下格式:

http://url/blabla/blabla.aspx?sv=[keyword%20keyword,%201]

我的理解是方括号表示数组语法,我想使用 XSLT 从所有 URL 中删除方括号。

我正在使用 Open URL 解析器,它目前不能很好地处理这些字符。最好的选择是在这些资源由 Open URL 解析器调解之前从所有 URL 中去除方括号。

在某些情况下,每个 URL 都会出现多次方括号。

4

3 回答 3

3

如果您使用身份转换模板并且

<xsl:template match="field[@name='url']">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:value-of select="replace(., '\[\]', '')"/>
  </xsl:copy>
</xsl:template>

您有一个删除括号的 XSLT 2.0 样式表。

于 2013-11-05T21:51:26.780 回答
2

为什么要去掉方括号,而不是转义它们?我的直觉是使用函数iri-to-uri(),它将对它们进行百分比编码:

http://www.w3.org/TR/xpath-functions-30/#func-iri-to-uri

于 2013-11-05T22:51:13.990 回答
1

我已经按照 Martin 和 Michael 的建议测试了这两种解决方案。发送到 OpenURL 的 Url 由 ID 和实际 URL 组成,如下所示:

  <openurl><xsl:value-of select="concat(field[@name='id'],'/', field[@name='url'])" /><openurl>

我首先使用了 fn:replace,如下:

  <openurl><xsl:value-of select="concat(field[@name='id'],'/', replace(field[@name='url'], '\[\]', ''))" /><openurl>

然后

<openurl><xsl:value-of select="concat(field[@name='id'],'/', iri-to-uri(field[@name='url']))" /></openurl>

查看 XML,url 仍然显示方括号。相当困惑,然后我进行了一些额外的测试。最后,我尝试使用 fn:encode-for-uri,方括号被替换为 %xx 形式的转义序列。然而,由 OpenUrl 调解的最终 URl 以某种方式重新格式化,方括号再次出现。我目前正在调查这个问题。

确实谢谢

我。

于 2013-11-06T15:56:20.710 回答