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.
2 answers
Diferença entre traduzir() e substituir ()
- utilizar traduzir ($s, $map from, $mapTo) alterar ocorrências de
caracteres dados em
$mapFrom
aos que se encontram em posições equivalentes em$mapTo
. - utilizar substituir ($s, $padrão, $substituição) para mudar
ocorrências de elementos correspondentes dado por uma correspondência
$pattern
regex to a$replacement
string.
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
.
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):