XSL меняет пробелы в ссылке на% 20 - PullRequest
1 голос
/ 20 декабря 2010

Мне нужно изменить ссылки, которые автоматически создаются MOSS07, с пробелами на% 20.


Пример:

{$SafeLinkURL}

, который вывел бы https://stackoverflow.com/example пробелов

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


Если кто-то может пролить свет на это, пожалуйста, сделайте.

Заранее спасибо,

Ник

Ответы [ 2 ]

2 голосов
/ 21 декабря 2010

Димитрий упомянул следующие функции XSLT 2.0:

  1. fn:encode-for-uri()
  2. fn:iri-to-uri()
  3. fn:escape-html-uri()

См. Ссылки для подробной спецификации и примеров. В вашем случае (если бы вы могли использовать процессор XSLT 2.0) fn:iri-to-uri() решило бы вашу проблему.

Но ни одна из этих функций не будет работать в вашей текущей среде XSLT 1.0 . Поэтому, пожалуйста, смотрите этот пост как справочник для других людей.

1 голос
/ 20 декабря 2010

Непонятно, о чем именно спрашивается в этом вопросе.

Если проблема заключается в замене всех пробелов в данной строке на «% 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...