Qual é a diferença entre traduzir e substituir no XPath

estava a passar por algumas funções XSLT e deparei-me com duas das principais chamadas translate e replace, entendi que, no final do dia, o trabalho de ambas as funções está a substituir algum conteúdo na entidade declarada (por favor, esclareça-me mais sobre isto).

também estava a escrever um XSLT onde quero substituir um único valor por um monte de valores como abaixo.

<div class="translate">
            <xsl:value-of select="translate(current(),' ', 'XXXXX')"/>
        </div>
        <div class="replace">
            <xsl:value-of select="replace(current(),' ', 'XXXXX')"/>
        </div>

o translate está a adicionar apenas um X, embora eu tenha adicionado XXXXX, onde como o substituto está a funcionar fino.

Alguém me pode dizer o que se passa no fundo?

Aqui está uma amostra de trabalho. http://xsltransform.net/6rewNxE/2

Author: kjhughes, 2016-08-17

2 answers

Diferença entre traduzir() e substituir ()

Note que translate() is disponível a partir de XPath 1. 0; replace(), a partir de XPath 2.0.

Portanto, no seu exemplo:

  • translate() irá substituir cada carácter ' ' (espaço) por um 'X' carácter, porque o carácter $mapTo que corresponde ao posição equivalente de ' ' (espaço) no $mapFrom é um 'X'.
  • replace() irá substituir a primeira sub-sequência " " (espaço único) com um "XXXXX", porque o literal $pattern corresponde ao primeiro ocorrência de Substring (espaço único) e substitui-o por o texto completo $replacement.
 3
Author: kjhughes, 2016-08-18 16:17:06

A função de substituição substitui uma cadeia por outra numa cadeia. Se houver a String " abcacb "e você substituir" ab "por" xy "você terá"xycacb".

replace("abcacb","ab","xy") = "xycabc"

A função traduzir substitui o texto charcter por carácter. O primeiro carácter na "please-replace-this-string" será substituído pelo primeiro carácter em "replace-with-this-string" Então, se houver a String " abcacb "e você traduzir" ab "com" xy "você terá"xycxcy".

translate("abcacb","ab","xy") = "xycxcy"

Para o seu caso:

  • substituir: ""será substituído por "XXXXX"
  • traduzir 'será substituído pelo primeiro carácter de 'XXXXXX' que é ' X '

As explicações das funções Oracle-SQL também podem ajudar (basicamente o mesmo):

 2
Author: Gehtnet, 2016-08-17 14:43:26