Rechercher : dans
Par :

Creation d'un element en XSLT

Dernière réponse le 24 mai 2008 à 01:07:43 pierre.inalco, le 22 mai 2008 à 17:12:15 
 Signaler ce message aux modérateurs

Bonjour à tous,

je suis en train de transformer un document XML via une feuille de style XSL.
Mon problème est le suivant :
je veux créer un nouvel élément dont le nom serait les trois premiers caractères d'un attribut du document XML source.

<xsl:template match="element1">
	<xsl:copy>
		<xsl:for-each select="element2">
		<xsl:element name="{substring(@att1,1,3)}">
		<xsl:value-of select="@att2" />
		</xsl:element>
		</xsl:for-each>
	</xsl:copy>
</xsl:template>


J'ai comme message d'erreur : ERROR: Description: To create nodes of type 'ELEMENT', a valid name must be specified.
(XML Cooktop)


Le plus étrange c'est que si je rajoute un caractère devant l'expression {substring(@att1,1,3)}, la transformation marche sans problème :

<xsl:template match="element1">
	<xsl:copy>
		<xsl:for-each select="element2">
		<xsl:element name="X{substring(@att1,1,3)}">
		<xsl:value-of select="@att2" />
		</xsl:element>
		</xsl:for-each>
	</xsl:copy>
</xsl:template>


me donne dans mon XML de sortie :

<Xatt1>
att2
</Xatt1>


Si quelqu'un à une autre solution que rajouter un caractère dont je n'ai pas besoin, je suis preneur !
Merci d'avance...
Configuration: Windows XP
Firefox 2.0.0.14

Meilleures réponses pour « Creation d'un element en XSLT » dans :
Comment créer un fond d'écran animé Voir Créer le fond d’écran Solution la plus simple : créer un GIF animé Exemple de logiciel : Ulead GIF Animator Étape 1 : créer un nouveau projet Étape 2 : importer et ajouter des éléments Étape 3 : manipuler chaque élément Étape 4 : manipuler...
Créer une adresse Hotmail.fr VoirPour créer un compte hotmail (@hotmail.fr), il suffit de créer un compte .NET passport en procédant à l'inscription via cette adresse Des informations personnelles vous concernant sont alors demandées par le service de messagerie de Microsoft. Il...
Création d'image Système (Ghost) VoirCréer une image (ghost) de partition 1 - Intérêt 2 - Pré-requis 2.1 - Explication 2.2 - Opportunités des partitions 2.3 - Mise à jour des images 2.3.1 - Image incrémentale : intéressant mais dangereux ! 2.3.2 - Image incrémentale et...
Télécharger LC ISO Creator VoirLC ISO Creator est très simple: Il permet de créer un fichier .ISO à partir de vos CD. Cela vous permet ensuite d'utiliser ces fichiers ISO pour les graver, utiliser un logiciel d'émulation de CD (pour ne plus avoir à utiliser le CD original) ou...
Créer un réseau local VoirPourquoi mettre en place un réseau local? Lorsque vous disposez de plusieurs ordinateurs, il peut être agréable de les connecter afin de créer un réseau local (en anglais LAN, abréviation de Local Area Network). La mise en place d'un tel réseau...
Langage C - Les listes chaînées VoirLa notion de structure autoréferrentielle Une structure autoréferrentielle (parfois appelée structure récursive) correspond à une structure dont au moins un des champs contient un pointeur vers une structure de même type. De cette façon on crée...
PHP - Expressions régulières VoirQu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...

1

 pierre.inalco, le 24 mai 2008 à 01:07:43

Je viens de trouver l'origine de l'erreur.
La valeur de l'attribut d'un des éléments que j'essayais de récupérer était la chaîne vide.
Le processeur ne pouvait donc pas créer un nouvel élément sans nom.
Pour remédier à cela, j'ai modifié le code de sorte que le processeur ignore ce type de cas :

<xsl:template match="element1[string(@att1)]">
	<xsl:copy>
		<xsl:for-each select="element2">
		<xsl:element name="{substring(@att1,1,3)}">
		<xsl:value-of select="@att2" />
		</xsl:element>
		</xsl:for-each>
	</xsl:copy>
</xsl:template>

Répondre à pierre.inalco
Collection CommentÇaMarche.net