如何在URL中转义方括号

如何在URL中转义方括号,url,xslt,xslt-2.0,saxon,Url,Xslt,Xslt 2.0,Saxon,我有一组来自Solr的记录,其中字段[@name='url']可以采用以下格式: http://url/blabla/blabla.aspx?sv=[keyword%20keyword,%201] 我的理解是,方括号表示数组语法,我想使用XSLT从所有URL中删除方括号 我使用的是一个开放URL解析器,它目前不能很好地处理这些字符。最好的选择是在开放URL解析程序对这些资源进行调解之前,从所有URL中去掉方括号 在某些情况下,每个URL都会多次出现方括号。如果使用标识转换模板和 <xsl

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

http://url/blabla/blabla.aspx?sv=[keyword%20keyword,%201]
我的理解是,方括号表示数组语法,我想使用XSLT从所有URL中删除方括号

我使用的是一个开放URL解析器,它目前不能很好地处理这些字符。最好的选择是在开放URL解析程序对这些资源进行调解之前,从所有URL中去掉方括号


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

如果使用标识转换模板和

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


如果使用标识转换模板和

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


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

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


为什么要去掉方括号,而不是避开它们?我的直觉是使用该函数,该函数将对它们进行百分比编码:


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

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

我首先使用fn:replace,如下所示:

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

然后


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

谢谢你


I.

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

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

我首先使用fn:replace,如下所示:

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

然后


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

谢谢你


I.

真的非常感谢,非常好的建议。请参阅我的帖子以获取更多信息。谢谢,非常好的建议。更多信息请参见我的帖子谢谢,非常有用+1对于你和迈克尔,更多信息请参见我的帖子。谢谢,非常有用+1关于你和迈克尔,更多信息请参见我的帖子。