XSL将链接中的空格更改为%20

时间:2010-12-20 15:45:40

标签: sharepoint sharepoint-2007 xslt

我需要更改由MOSS07自动创建的链接,其中包含空格以包含%20。


示例:

{$SafeLinkURL}

将输出https://stackoverflow.com/example个空格

https://stackoverflow.com/example%20of%20spaces


如果有人能对此有所了解,请做。

提前致谢,

尼克

3 个答案:

答案 0 :(得分:2)

Dimitrie提到的XSLT 2.0功能是:

  1. fn:encode-for-uri()
  2. fn:iri-to-uri()
  3. fn:escape-html-uri()
  4. 有关详细规范和示例,请参阅链接。在您的情况下(如果您可以使用XSLT 2.0处理器),fn:iri-to-uri()将解决您的问题。

    这些功能都不适用于您当前的XSLT 1.0环境。所以请将此帖作为其他人的未来参考。

答案 1 :(得分:1)

目前尚不清楚这个问题到底要求的是什么。

如果问题是用“%20”替换给定字符串中的所有空格字符,这里是一个XSLT解决方案

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="link/text()[contains(., ' ')]">
  <xsl:call-template name="replace"/>
 </xsl:template>

 <xsl:template name="replace">
  <xsl:param name="pText" select="."/>
  <xsl:param name="pTarget" select="' '"/>
  <xsl:param name="pReplacement" select="'%20'"/>

  <xsl:choose>
   <xsl:when test="not(contains($pText, $pTarget))">
    <xsl:value-of select="$pText"/>
   </xsl:when>
   <xsl:otherwise>
     <xsl:value-of select=
      "substring-before($pText, $pTarget)"/>
     <xsl:value-of select="$pReplacement"/>
     <xsl:call-template name="replace">
       <xsl:with-param name="pText" select=
            "substring-after($pText, $pTarget)"/>
       <xsl:with-param name="pTarget" select="$pTarget"/>
       <xsl:with-param name="pReplacement"
            select="$pReplacement"/>
     </xsl:call-template>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>

在此XML文档上应用此转换时

<link>http://stackoverflow.com/example of spaces</link>

产生了想要的正确结果

<link>http://stackoverflow.com/example%20of%20spaces</link>

答案 2 :(得分:0)

我的输入是

<a href="a/file name.pdf">

我想处理这个空间,通过添加 encode(@href, 'UTF-8') 来应用 xmlns:u="java:java.net.URLEncoder"

输出:

<a href="a%2Ffile+name.pdf">

这里的问题是 + 而不是 %20。所以我用 replace($encoded-name, '[+]', '%20')

替换了它

您要复制的代码:

<xsl:transform version="2.0" 
xmlns:u="java:java.net.URLEncoder"
>
<xsl:param name="encoded-name" select="u:encode(@href, 'UTF-8')"/>
<xsl:param name="final-name" select="replace($encoded-name, '[+]', '%20')"/>

最终输出:

<a href="a%2Ffile%20name.pdf">