Accueil
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi Eclipse MS-Office SQL & SGBD Oracle  4D  Business Intelligence
logo



Auteur : Erwan Amoureux
Version : 06/02/2007
Fonction "Replace"
Permet de substituer une chaîne à une autre, un nombre maximal de fois.
Le XML

<?xml version="1.0" encoding="UTF-8"?>
<text>
Ce fichier servira de test pour verifier les fonctions.
Ce fichier servira de test pour verifier les fonctions.
</text>
Le XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
	<xsl:template match="/">
	<res>
		<test2>
	<xsl:call-template name="Replace">
	<xsl:with-param name="chaine" select="text"></xsl:with-param>
	<xsl:with-param name="chaineCherche" select="'test'"></xsl:with-param>
	<xsl:with-param name="chaineRempl" select="'essai'"></xsl:with-param>
		<xsl:with-param name="Occur" select="1"></xsl:with-param>
	</xsl:call-template>	
	</test2>
	<test1>
	<xsl:call-template name="Replace">
	<xsl:with-param name="chaine" select="text"></xsl:with-param>
	<xsl:with-param name="chaineCherche" select="'test'"></xsl:with-param>
	<xsl:with-param name="chaineRempl" select="'essai'"></xsl:with-param>
	</xsl:call-template>
	</test1>

	</res>
	
	</xsl:template>
	<xsl:template name="Replace">
	<!--remplace une chaine par une autre-->
		<xsl:param name="chaine"/>
		<xsl:param name="chaineCherche"/>
		<xsl:param name="chaineRempl"/>
		<xsl:param name="Occur"/>
		<!--si Occur n'est pas rempli il remplace toutes les occurences-->
		<xsl:choose>
			<xsl:when test="contains($chaine,$chaineCherche) ">
				<xsl:choose>
					<xsl:when test="number($Occur)=0">
				<xsl:value-of select="$chaine"/>
					</xsl:when>
					<xsl:when test="$Occur>0">
						<xsl:call-template name="Replace">
							<xsl:with-param name="chaine" select="concat(substring-before($chaine,$chaineCherche),$chaineRempl,substring-after($chaine,$chaineCherche))"/>
							<xsl:with-param name="chaineCherche" select="$chaineCherche"/>
							<xsl:with-param name="chaineRempl" select="$chaineRempl"/>
							<xsl:with-param name="Occur" select="$Occur - 1"/>
						</xsl:call-template>
					</xsl:when>
					<xsl:otherwise>
								<xsl:call-template name="Replace">
							<xsl:with-param name="chaine" select="concat(substring-before($chaine,$chaineCherche),$chaineRempl,substring-after($chaine,$chaineCherche))"/>
							<xsl:with-param name="chaineCherche" select="$chaineCherche"/>
							<xsl:with-param name="chaineRempl" select="$chaineRempl"/>
						</xsl:call-template>
						
					</xsl:otherwise>
				</xsl:choose>
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="$chaine"/>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
</xsl:stylesheet>
Le Résultat

<?xml version="1.0" encoding="UTF-8"?>
<res>
	<test2>
Ce fichier servira de essai pour verifier les fonctions.
Ce fichier servira de test pour verifier les fonctions.
</test2>
	<test1>
Ce fichier servira de essai pour verifier les fonctions.
Ce fichier servira de essai pour verifier les fonctions.
</test1>
</res>

Auteur : Erwan Amoureux
Version : 06/02/2007
Nombre d'occurences d'une chaîne
La fonction translate permet de remplacer caractère par caractère, mais on a plus souvent besoin de remplacer toute une partie de la chaîne, ce template permet de le faire.
Le XML

<?xml version="1.0" encoding="UTF-8"?>
<text>
Ce fichier servira de test pour verifier les fonctions.
Ce fichier servira de test pour verifier les fonctions.
</text>
Le XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
	<xsl:template match="/">
	<res>
	nombre de fois (test):
	<xsl:call-template name="CharOccur">
	<xsl:with-param name="chaine" select="text"></xsl:with-param>
	<xsl:with-param name="chaineCherche" select="'test'"></xsl:with-param>
	</xsl:call-template>	

	</res>
	
	</xsl:template>
		<xsl:template name="CharOccur">
		<!-- nombre d'occurence d'une chaine-->
		<xsl:param name="chaine"/>
		<xsl:param name="chaineCherche"/>
		<xsl:param name="Occur" select="0"/>
		<xsl:choose>
			<xsl:when test="contains($chaine,$chaineCherche) ">
				<xsl:call-template name="CharOccur">
					<xsl:with-param name="chaine" select="substring-after($chaine,$chaineCherche)"/>
					<xsl:with-param name="chaineCherche" select="$chaineCherche"/>
					<xsl:with-param name="Occur" select="$Occur+1"/>
				</xsl:call-template>
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="$Occur"/>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
</xsl:stylesheet>
Le Résultat

<?xml version="1.0" encoding="UTF-8"?>
<res>
	nombre de fois (test) :
	2
</res>

Auteur : Erwan Amoureux
Version : 06/02/2007
Extraire la chaîne la plus fréquente
Permet de récupérer la chaîne (ou le nombre) présent le plus fréquement dans un document.
Le XML

<?xml version="1.0" encoding="UTF-8"?>
<liste>
	<y>a</y>
	<y>b</y>
	<y>a</y>
	<y>b</y>
	<y>b</y>
	<y>c</y>
	<y>a</y>
	<y>b</y>
</liste>
Le XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="text"/>
	<xsl:template match="/">
	La chaîne revenant le plus souvent : <xsl:call-template name="maxOccur">
	<xsl:with-param name="noeuds" select="*/*"></xsl:with-param>
	</xsl:call-template>	
	Nombre d'occurrence de cette chaine : <xsl:call-template name="maxOccurNb">
	<xsl:with-param name="noeuds" select="*/*"></xsl:with-param>
	</xsl:call-template>	
	</xsl:template >
	<xsl:template name="maxOccur">
	<!--valeur revenant le plus frequemment dans un node-set-->
		<xsl:param name="noeuds"/>
		<xsl:choose>
			<xsl:when test="not($noeuds[.!=$noeuds[1]])">
				<xsl:value-of select="$noeuds[1]"/>
			</xsl:when>
			<xsl:otherwise>
				<xsl:choose>
					<xsl:when test="count($noeuds[.=$noeuds[1]]) >= count($noeuds[.=($noeuds[. != $noeuds[1]])[1]])">
						<xsl:call-template name="maxOccur">
							<xsl:with-param name="noeuds" select="$noeuds[.!=($noeuds[. != $noeuds[1]])[1]]"/>
						</xsl:call-template>
					</xsl:when>
					<xsl:otherwise>
						<xsl:call-template name="maxOccur">
							<xsl:with-param name="noeuds" select="$noeuds[.!=$noeuds[1]]"/>
						</xsl:call-template>
					</xsl:otherwise>
				</xsl:choose>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
			<xsl:template name="maxOccurNb">
	<!--nombre de repetition de la valeur la plus frequente dans un node-set-->
		<xsl:param name="noeuds"/>
		<xsl:choose>
			<xsl:when test="not($noeuds[.!=$noeuds[1]])">
				<xsl:value-of select="count($noeuds)"/>
			</xsl:when>
			<xsl:otherwise>
				<xsl:choose>
					<xsl:when test="count($noeuds[.=$noeuds[1]]) >= count($noeuds[.=($noeuds[. != $noeuds[1]])[1]])">
						<xsl:call-template name="maxOccurNb">
							<xsl:with-param name="noeuds" select="$noeuds[.!=($noeuds[. != $noeuds[1]])[1]]"/>
						</xsl:call-template>
					</xsl:when>
					<xsl:otherwise>
						<xsl:call-template name="maxOccurNb">
							<xsl:with-param name="noeuds" select="$noeuds[.!=$noeuds[1]]"/>
						</xsl:call-template>
					</xsl:otherwise>
				</xsl:choose>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	</xsl:stylesheet>
Le Résultat

La chaîne revenant le plus souvent : b
Nombre d'occurrence de cette chaine : 4


Consultez les autres pages sources


Les sources présentés sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2006  Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com