Menu

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

pierre.inalco 9 Messages postés mardi 8 janvier 2008Date d'inscription 24 mai 2008 Dernière intervention - 22 mai 2008 à 17:12 - Dernière réponse : pierre.inalco 9 Messages postés mardi 8 janvier 2008Date d'inscription 24 mai 2008 Dernière intervention
- 24 mai 2008 à 01:07
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...
Afficher la suite 

1 réponse

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