Partager via


Fonction string

Convertit un objet en une chaîne.

string string(object?)

Notes

Conversion de collections de nœuds en chaînes

La fonction string() convertit une collection de nœuds en une chaîne en retournant la valeur de chaîne du premier nœud de la collection de nœuds, ce qui peut parfois produire des résultats inattendus.Par exemple, si vous êtes positionné sur le nœud <test> ci-dessous :

<test>
  <item>Apple</item>
  <item>Banana</item>
  <item>Orange</item>
</test>

L'appel de fonction string() retourne alors la chaîne du premier nœud (« Apple ») :

string(//text()) 

Si vous souhaitez que la fonction string() concatène le texte de tous les enfants, vous devez lui soumettre un seul nœud plutôt qu'une collection de nœuds.Par exemple, l'appel de fonction string() suivant retournerait « AppleBananaOrange » :

string(.)

Ce comportement est valable pour toutes les fonctions XPath qui utilisent des arguments de type chaîne.Par exemple, l'appel de fonction contains() suivant :

contains(//text(),'Banana')

retourne la valeur false.Dans cet exemple, cela est dû au fait que le premier argument (« //text() ») est converti en chaîne avec string(//text()), qui ne cherche que la chaîne du premier nœud (« Apple »).En revanche, si la fonction contains() était revue pour utiliser le sélecteur point (« . ») pour le premier argument comme suit :

contains(.,'Banana') 

la valeur retournée par contains() serait true car la chaîne recherchée serait alors « AppleBananaOrange ».

Notes

Si la collection de nœuds est vide, une chaîne vide est retournée.

Traitement des espaces blancs dans les conversions de collections de nœuds

Les collections de nœuds contenant des espaces blancs peuvent être traitées de deux manières :

  • en éliminant les espaces blancs à l'aide d'une instruction Élément <xsl:strip-space> ;

  • en effectuant une boucle dans tous les nœuds descendants (tant les nœuds d'espaces blancs que les nœuds contenant du texte) à l'aide d'une instruction Élément <xsl:for-each>.

Par exemple, si une expression .//text() était appliquée à l'élément suivant pour en sélectionner le contenu texte :

<name>element</name>

elle retournerait par défaut une collection de trois nœuds comme suit, les premier et troisième nœuds représentant les nœuds d'espace blanc qui précèdent et suivent les données de texte (« element ») :

Node 1: &#10;&#32;&#32;
Node 2: element
Node 03: &#10;

Pour ignorer les nœuds contenant uniquement des espaces blancs, vous pourriez spécifier l'instruction <xsl:strip-space> suivante dans la feuille de style XSLT :

<xsl:strip-space elements="name"/>

Ou bien, vous pourriez effectuer une boucle et répéter une recherche pour chaque nœud descendant à l'aide de la boucle <xsl:for-each> comme dans l'exemple ci-dessous :

<xsl:for-each select=".//text()">
    <xsl:if test="contains(., 'element')" >
    …
    </xsl:if>
</xsl:for-each>

Conversion de nombres en chaînes

Un nombre est converti en chaîne comme suit.

  • Une valeur NaN est convertie en une chaîne NaN.

  • Un zéro positif est converti en une chaîne « 0 ».

  • Un zéro négatif est converti en une chaîne « 0 ».

  • Une infinité positive est convertie en une chaîne « Infinity ».

  • Une infinité négative est convertie en une chaîne « -Infinity ».

  • Si le nombre est un entier, le nombre est représenté sous forme décimale comme un nombre sans virgule décimale ni zéros à gauche, précédé d'un soigne moins (-) si le nombre est négatif.

  • Sinon, le nombre est représenté sous forme décimale comme un nombre avec une virgule décimale et au moins un chiffre avant la virgule décimale et au moins un chiffre après la virgule décimale, précédé d'un signe moins (-) si le nombre est négatif ; il ne peut pas y avoir de zéros à gauche avant la virgule décimale, si ce n'est celui qui est éventuellement requis juste avant la virgule ; au-delà du seul chiffre requis après la virgule décimale, il faut autant, mais pas plus, de chiffres supplémentaires qu'il est nécessaire pour distinguer de manière unique le nombre de toutes les autres valeurs numériques IEEE 754.

Notes

La fonction string() n'est pas conçue pour convertir des nombres en chaînes en vue de leur présentation aux utilisateurs.La fonction format-number() et l'élément <xsl:number> dans XSL Transformations (XSLT) offrent cette fonctionnalité.

Conversion de booléens en chaînes

La valeur Faux booléen est convertie en une chaîne « false ».La valeur Vrai booléen est convertie en une chaîne « true ».

Conversion d'objets en chaînes

Un objet d'un type autre que les quatre types de base est converti en une chaîne d'une manière qui dépend du type en question.

Si l'argument est omis, la valeur par défaut est une collection de nœuds avec le nœud de contexte comme seul membre.

Exemple

L'exemple suivant illustre l'utilisation de la fonction string() dans une expression XPath.Dans deux cas (voir les instructions en gras dans le fichier XSLT ci-dessous), la fonction permet de garantir que son argument est traité comme une expression de chaîne.

Fichier XML (string.xml)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"    

href="string.xsl"?>      
<arithmetics>
  <operation>
     <operator>+</operator>
     <operand>1</operand>
     <operand>2.00</operand>
  </operation>
  <operation>
     <operator>+</operator>
     <operand>One</operand>
     <operand>2.00</operand>
  </operation>
  <operation>
     <operator>-</operator>
     <operand>1</operand>
     <operand>2.00</operand>
  </operation>
  <operation>
     <operator>*</operator>
     <operand>1</operand>
     <operand>2.00</operand>
  </operation>
  <operation>
     <operator>div</operator>
     <operand>-1</operand>
     <operand>0.0</operand>
  </operation>
  <operation>
     <operator>mod</operator>
     <operand>5</operand>
     <operand>2</operand>
  </operation>
  <operation>
     <operator>mod</operator>
     <operand>5</operand>
     <operand>2.5</operand>
  </operation>
  <operation>
     <operator>mod</operator>
     <operand>5</operand>
     <operand>2.25</operand>
  </operation>
  <operation>
     <operator>&amp;</operator>
     <operand>0</operand>
     <operand>1</operand>
  </operation>
</arithmetics>

Fichier XSLT (string.xsl)

<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="string.xsl"?>
<xsl:stylesheet version="1.0"           

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="html"   
     omit-xml-declaration="yes"/>

  <xsl:template match="/arithmetics">
    <html>
       <head><title>example</title></head>
    <body>
       <xsl:apply-templates/>
    </body>
    </html>
  </xsl:template>

  <xsl:template match="operation">
    <DIV>
     <xsl:choose>
        <xsl:when test="string(operator)='+'">
           <xsl:apply-templates select="." mode="add"/>
        </xsl:when>
        <xsl:when test="string(operator)='-'">
           <xsl:apply-templates select="." mode="sub"/>
        </xsl:when>
        <xsl:when test="string(operator)='*'">
           <xsl:apply-templates select="." mode="mul"/>
        </xsl:when>
        <xsl:when test="string(operator)='div'">
           <xsl:apply-templates select="." mode="div"/>
        </xsl:when>
        <xsl:when test="string(operator)='mod'">
           <xsl:apply-templates select="." mode="mod"/>
        </xsl:when>
        <xsl:otherwise>
           <xsl:apply-templates select="." mode="err"/>
        </xsl:otherwise>
      </xsl:choose>
    </DIV>
  </xsl:template>

  <xsl:template match="operation" mode="show">
     <xsl:value-of select="operand[1]"/> &#160;
     <xsl:value-of disable-output-escaping="yes" 
                   select="string(operator)"/> &#160;
     <xsl:value-of select="operand[2]"/> &#160;
     = &#160;
  </xsl:template>

  <xsl:template match="operation" mode="err">
      <xsl:apply-templates select="." mode="show"/>
      <xsl:value-of select="string('Invalid arithmetic operation')"/>       
  </xsl:template>

  <xsl:template match="operation" mode="add">
      <xsl:apply-templates select="." mode="show"/>
      <xsl:value-of select="operand[1] + operand[2]"/>       
  </xsl:template>

  <xsl:template match="operation" mode="sub">
      <xsl:apply-templates select="." mode="show"/>
      <xsl:value-of select="operand[1] - operand[2]"/>       
  </xsl:template>
  <xsl:template match="operation" mode="mul">
      <xsl:apply-templates select="." mode="show"/>
      <xsl:value-of select="operand[1] * operand[2]"/>       
  </xsl:template>
  <xsl:template match="operation" mode="div">
      <xsl:apply-templates select="." mode="show"/>
      <xsl:value-of select="operand[1] div operand[2]"/>       
  </xsl:template>
  <xsl:template match="operation" mode="mod">
      <xsl:apply-templates select="." mode="show"/>
      <xsl:value-of select="operand[1] mod operand[2]"/>       
  </xsl:template>
</xsl:stylesheet>

Sortie

1     +   2.00   =   3
One   +   2.00   =   NaN
1     -   2.00   =   -1
1     *   2.00   =   2
-1   div   0.0   =   -Infinity
5    mod   2     =   1
5    mod   2.5   =   0
5    mod   2.25  =   0.5
0     &    1     =   Invalid arithmetic operation

Voir aussi

Référence

Référence des types de données XML

Fonction format-number

Concepts

Valeurs NaN