déclaration de namespace et localisation attribut [XSLT] - XML/XSL - Programmation
Marsh Posté le 04-11-2011 à 16:47:20
Pour la déclaration du namespace, si on n'en veut pas en sortie: exclude-result-prefixes
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
exclude-result-prefixes="ss" >
A+,
Marsh Posté le 04-11-2011 à 17:36:23
Je n'ai pas répondu volontairement au second, car c'est quelque chose de tellement basique, que si vous avez potassé un minimum le XSLT, vous saurez comment faire.
Il ne faut peut être pas se moquer du monde, n'importe quel tutorial sur le XSLT vous montre rapidement comment récupérer le valeur d'un attribut pour l'écrire dans le XML résultat.
A+,
Marsh Posté le 07-11-2011 à 13:56:59
Ce n'était peut être pas la peine d'être aussi sec ...
J'en ai lu beaucoup des tutoriels XSLT et je ne comprend pas pourquoi il ne me renvoie rien ... J'ai essayé plusieurs façon pour extraire la valeur "Composants" et avec Cooktop j'ai toujours un vide dan smon attribut NAME dans le résultat ...
Si vous aviez une piste ça m'arrangerait
Merci !
Marsh Posté le 07-11-2011 à 17:19:19
Ah désolé, j'avais pensé que vous aviez fait une faute de débutant.
En fait, c'est plus subtil que cela, vous êtes tombée sur le piège standard du namespace par défaut:
1) Dans le document source, vous avez un namespace par défaut
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
Donc quand il y a un élément sans préfixe dans le source, il est envoyé au xslt avec son namespace préfixé, bref, quelquechose comme <Workbook> dans le source est vu par le XSLT comme <{urn:schemas-microsoft-com:office:spreadsheet}Workbook> ou quelque chose dans le genre.
Donc pour que les règles du XSLT s'appliquent a un élément non préfixé du source, il faut
a) définir un namespace et un préfixe dans le XSLT, avec comme valeur du namespace celle du namespace par défaut du source
par exemple xmlns:rt="urn:schemas-microsoft-com:office:spreadsheet"
b) Dans les règles XSLT, préfixer avec ce préfixe les noms des éléments sans préfixe dans le source:
<xsl:value-of select="//rt:Worksheet"/>
2) Dans le XSLT, vous avez un préfixe sur l'attribut: @ss:Name car il y en a un dans le source
C'est bien, mais ça suffit pas, car le xslt ne prend pas en compte pour lui même les déclarations de namespaces du source
Il vous faudra donc recopier les déclarations de namespace (sauf celle du namespace par défaut s'il y en a un) dans le XSLT.
Bref, ceci devrait faire ce que vous cherchiez.
Code :
|
Noter qu'on doit en fait ici simplifier, en virant la déclaration du namespace rt, et en réutilisant le namespace ss.
Code :
|
A+,
Marsh Posté le 08-11-2011 à 15:12:31
Merci beaucoup pour ton aide, j'ai appliqué tes conseils et j'ai rajouté le namespace à mes balises <worksheet> au doc source et en recopiant ton XSLT mais ça me sort toujours :
Code :
|
Marsh Posté le 08-11-2011 à 20:03:02
Ben chez moi ça marche comme prévu:
Le XML en entrée: worksheet.xml
<?xml version="1.0" encoding="ISO-8859-1"?> |
Le feuille de style XSLT: worksheet.xsl
<?xml version="1.0" encoding="ISO-8859-1"?> |
Le processing par un processeur XSLT (Saxon en l’occurrence)
C:\Program Files\Saxonica\SaxonHE9.3N>bin\Transform -t -s:workbook.xml -xsl:workbook.xsl -o:wout.xml |
Le fichier XML obtenu en sortie: wout.xml
<?xml version="1.0" encoding="ISO-8859-1"?> |
On voit d'ailleurs que comme je n'avais pas mis html dans la liste des préfixes exclus, le namespace associé figure en sortie.
A+,
Marsh Posté le 09-11-2011 à 10:22:51
Pour ma part j'utilise Cooktop et en lisant ton post précédent, j'ai fouillé un peu et j'ai changé le processeur XSLT pour .NET à la place de MSXML et ça marche !
Merci beaucoup !!
Marsh Posté le 09-11-2011 à 10:33:34
Oui pour processer du XSLT, j'ai plutôt tendance a utiliser saxon ( saxon.sourceforge.net ) ou XT ( http://www.blnz.com/xt/index.html ) qui sont des valeurs sures.
A+,
Marsh Posté le 04-11-2011 à 15:31:23
Bonjour,
Complètement nouvelle dans le merveilleux monde XML/XSLT je dois trnasformer un document XML en un autre.
J'ai déjà réussi quelques ptites choses mais là mes problèmes (qui ne sont pas reliés), je n'y trouve solution nulle part ...
Mon XML de base :
Mon XSLT :
Et mon résultat :
Mes 2 soucis :
Il me met la déclaration des namespaces dans la balise EXPORT alors que je voudrais que ce ne soit pas dans le résultat.
L’attribut NAME de la balise IDENTIFICATION est de valeur vide alors que je voudrait qu’il me renvoie « Composants »
Si vous pouviez m'aider car la je patauge complètement ...
Merci
Message édité par DelWeb le 04-11-2011 à 15:32:02