web-dev-qa-db-fra.com

Quelle est la différence entre traduire et remplacer dans XPath

Je parcourais certaines fonctions XSLT et suis tombé sur deux principalement nommés translate et replace, j'ai compris que, à la fin de la journée, le travail des deux fonctions remplaçait du contenu sur déclaré entité (veuillez m'éclairer davantage à ce sujet).

J'écrivais également un XSLT où je veux remplacer une seule valeur par un tas de valeurs comme ci-dessous.

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

Le translate n'ajoute qu'un X, bien que j'aie ajouté XXXXX, où le remplacement fonctionne correctement.

Quelqu'un peut-il me faire savoir ce qui se passe en arrière-plan?

Voici un exemple de travail http://xsltransform.net/6rewNxE/2

9
user2423959

Différence entre translate () et replace ()

Notez que translate() est disponible à partir de XPath 1.0; replace(), de XPath 2.0.

Par conséquent, dans votre exemple:

  • translate() remplacera chaque caractère ' ' (espace) par un caractère 'X', car le caractère $mapTo qui correspond à la position équivalente de ' ' (espace) dans le $mapFrom est un 'X'.
  • replace() remplacera la première sous-chaîne " " (simple espace) par une "XXXXX", car le littéral $pattern correspond à la première occurrence d'une sous-chaîne " " (simple espace) et la remplace par la chaîne complète $replacement.
5
kjhughes

La fonction de remplacement remplace une chaîne par une autre dans une chaîne. S'il y a la chaîne "abcacb" et que vous remplacez "ab" par "xy", vous obtenez "xycacb".

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

La fonction de traduction remplace le caractère de chaîne par caractère. Le premier caractère de la chaîne "please-replace-this-string" sera remplacé par le premier caractère de "replace-with-this-string" Donc s'il y a la chaîne "abcacb" et que vous traduisez "ab" par "xy" vous obtenez "xycxcy".

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

Pour votre cas:

  • replace: '' sera remplacé par 'XXXXX'
  • traduire '' sera remplacé par le premier caractère de 'XXXXXX' qui est 'X'

Les explications des fonctions Oracle-SQL peuvent également aider (essentiellement les mêmes):

3
Gehtnet