我有一组来自Solr的记录,其中field[@name='url']
可以采用以下格式:
http://url/blabla/blabla.aspx?sv=[keyword%20keyword,%201]
我的理解是方括号表示数组语法,我想使用XSLT从所有URL中删除方括号。
我正在使用一个Open URL解析器,它目前不能很好地处理这些字符。最好的选择是在开放URL解析器调解此类资源之前从所有URL中删除方括号。
在某些情况下,每个网址都会出现多次方括号。
答案 0 :(得分: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样式表。
答案 1 :(得分:2)
为什么要删除方括号而不是转义它们?我的直觉是使用函数iri-to-uri()
,它将对它们进行百分比编码:
答案 2 :(得分:1)
我已根据Martin和Michael的推荐测试了两种解决方案。发送给OpenURL的网址包含ID和实际网址,如下所示:
<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,网址仍显示方括号。相当困惑的是,我进行了一些额外的测试。最后,我尝试使用fn:encode-for-uri,并使用%xx格式的转义序列替换方括号。然而,由OpenUrl调解的最终URl以某种方式重新格式化并且方括号再次出现。我目前正在调查这个问题。
非常感谢,
我