Signaler

Creation d'un element en XSLT [Résolu/Fermé]

Posez votre question pierre.inalco 9Messages postés mardi 8 janvier 2008Date d'inscription 24 mai 2008 Dernière intervention - Dernière réponse le 24 mai 2008 à 01:07 par pierre.inalco
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...
Utile
-1
plus moins
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>

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !