|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Renaud Médiamaticien Inscription : janvier 2012 Messages : 13 ![]() |
Bonjour,
Je suis débutant en XSL et je dois créer des feuilles de style pour transformer des documents XML en XML_EAD. Suite à de nombreuses recherches je n'ai rien trouvé alors je me lance Je pars sur un modèle qui comporte tout les champs qu'il est possible d'avoir dans notre base de donnée: Code :
Code :
Code :
Merci d'avance pour vos réponse, Renaud |
||||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Tlouye Ci Inscription : mars 2004 Messages : 1 456 ![]() |
Si t'as la possibilité de passer en XSL 2.0, tu peux facilement remplacer les virgules et espaces de ton unitid en utilisant la fonction replace(string,pattern,replace).
Si tu dois rester en XSL 1.0, tu peux faire un template récursif pour faire le traitement avec des substring-before(string1,string2) et substring-after(string1,string2). Pour ce qui est de ne pas afficher les balises si le contenu est vide, tu n'as pas 36 possibilités : tu dois tester pour chaque balise si son contenu sera vide ou non avec des xsl:if. |
|
|
00
|
|
|
#3 | ||||||
|
Invité de passage
![]() Renaud Médiamaticien Inscription : janvier 2012 Messages : 13 ![]() |
Citation:
Pour te répondre oui je suis obliger de rester en XSL 1.0. Pourrais-tu m'indiquer ce qu'est un template récursif stp ? (Et oui je suis un débutant) Ou alors un lien ou je pourrais me renseigner car je nage là ... Citation:
Code :
Code :
Merci, Renaud |
||||||
|
|
00
|
|
|
#4 | ||||||
|
Membre Expert
![]() Tlouye Ci Inscription : mars 2004 Messages : 1 456 ![]() |
Un template récursif est un template (utilisé comme une fonction) qui se rappelle lui-même jusqu'à ce que le traitement soit terminé.
Ici par exemple, pour supprimer les virgules tu pourrais faire : Code :
Code :
La fonction translate remplace chaque caractère du deuxième argument (ici « ' ,' ») par le caractère à la même position dans le troisième argument (ici « '_-' ») ou supprime le caractère s'il n'y a pas de caractère à la même position dans le 3ième argument. Dans le cas présent, elle remplace donc ' ' par '_' et ',' par '-'. Sinon pour ton code, le résultat est presque tel que souhaité parce que le code est presque bon. Voilà comment il faut écrire le test, pour chaque balise : Code :
|
||||||
|
|
10
|
|
|
#5 |
|
Invité de passage
![]() Renaud Médiamaticien Inscription : janvier 2012 Messages : 13 ![]() |
Merci pour cette réponse
Je vais aller me chercher un bon café et essayer cela |
|
|
00
|
|
|
#6 | ||||||
|
Invité de passage
![]() Renaud Médiamaticien Inscription : janvier 2012 Messages : 13 ![]() |
J'ai modifier ma feuille de style comme ceci:
Code :
Code :
Code :
Renaud |
||||||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Tlouye Ci Inscription : mars 2004 Messages : 1 456 ![]() |
A priori non.
Là tu n'affiches aucune sous-balise si l'élément "DetailData/DataElement[@ElementId=10102]/ElementValue/TextValue" n'est pas trouvé. Pourtant les autres balises n'en dépendent pas. Ceci dit c'est peut-être le résultat désiré. De plus, côté indentation, tous les ifs étant au même "niveau" il serait plus logique, correct et lisible de les indenter de la même façon. |
|
|
00
|
|
|
#8 | ||
|
Invité de passage
![]() Renaud Médiamaticien Inscription : janvier 2012 Messages : 13 ![]() |
Citation:
Citation:
Merci pour ces informations. |
||
|
|
00
|
|
|
#9 | ||
|
Invité de passage
![]() Renaud Médiamaticien Inscription : janvier 2012 Messages : 13 ![]() |
Hello,
Maintenant que je n'ai presque plus de champs vide il faudrait que je sache comment faire avec des champs qui comporte plus de 2 informations. Exemple: Code :
Merci d'avance, Renaud |
||
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Tlouye Ci Inscription : mars 2004 Messages : 1 456 ![]() |
C'est la balise when car c'est seulement dans celle-là que tu peux mettre une condition.
La balise otherwise n'intervient que quand toutes les conditions des when sont fausses. |
|
|
10
|
|
|
#11 | ||
|
Invité de passage
![]() Renaud Médiamaticien Inscription : janvier 2012 Messages : 13 ![]() |
D'accord merci pour ta réponse.
Ce serait donc comme ceci ? (Sauf l'alignement des balises qui se décale quand je colle le code): Code :
|
||
|
|
00
|
|
|
#12 | ||
|
Membre Expert
![]() Tlouye Ci Inscription : mars 2004 Messages : 1 456 ![]() |
Tu peux faire comme ça mais le plus simple dans ton cas serait de ne mettre que des ifs :
Code :
|
||
|
|
10
|
|
|
#13 |
|
Invité de passage
![]() Renaud Médiamaticien Inscription : janvier 2012 Messages : 13 ![]() |
Ok je vais essayer cela.
Merci de prendre ce temps pour m'aider en tout cas
|
|
|
00
|
|
|
#14 | ||
|
Invité de passage
![]() Renaud Médiamaticien Inscription : janvier 2012 Messages : 13 ![]() |
Hello,
J'ai effectuer les modifications pour obtenir finalement ceci: Code :
Pour ce qui est de retirer les espace et les virgules dans la balise <unitid> j'en suis là: Serait-il possible d'ajouter un remplacement des espaces directement dans le template que tu m'avais présenter (replace_comma) ou dois-je passer par plusieurs autres étapes ? Merci, Renaud |
||
|
|
00
|
|
|
#15 | |||
|
Membre Expert
![]() Tlouye Ci Inscription : mars 2004 Messages : 1 456 ![]() |
A priori il doit rester une erreur dans ton code.
Citation:
Code :
|
|||
|
|
10
|
|
|
#16 |
|
Invité de passage
![]() Renaud Médiamaticien Inscription : janvier 2012 Messages : 13 ![]() |
Merci
![]() Je vais donc maintenant m'atteler à la dernière balise qui s'affiche lorsqu'elle est vide ( je pense que c'est une erreur dans le chemin d'accès). Je te fais signe dès que j'ai fait cela.
|
|
|
00
|
|
|
#17 |
|
Invité de passage
![]() Renaud Médiamaticien Inscription : janvier 2012 Messages : 13 ![]() |
Hello,
Alors pour ce qui est de la balise qui s'affiche toujours même lorsque elle est vide c'est bon, l'outil de publication n'affiche pas l'information lorsque elle est vide donc c'est ok. Je suis maintenant tombé sur un autre problème: Code :
<unitid>CH_AEV-Fonderie_d'Ardon</unitid> Après j’arrête Merci d'avance, Renaud |
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() Tlouye Ci Inscription : mars 2004 Messages : 1 456 ![]() |
Il suffit de le rajouter au translate, je te laisse trouver comment (avec la doc que je t'ai fourni tu devrais trouver).
|
|
|
00
|
|
|
#19 | |
|
Invité de passage
![]() Renaud Médiamaticien Inscription : janvier 2012 Messages : 13 ![]() |
Hello,
J'ai regardé la doc que tu m'as mise pour faire cette correction mais à chaque fois que j'insère le " ' " j’obtiens l'erreur : Citation:
J'essaye encore de faire cela. Merci, Renaud |
|
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() Tlouye Ci Inscription : mars 2004 Messages : 1 456 ![]() |
C'est dû au fait que les guillemets sont aussi utilisé en temps que délimitateur de chaîne.
Pour passer outre, il faut : - utiliser l'entité correspondant au guillement (') - inverser les " et les ' pour que l'entité ne soit pas encadrée par des '. Voilà donc ce qu'il faut écrire : Code :
<xsl:value-of select='translate(concat($to_string, $from_string), "' ,", "-_-")'/>
|
|
|
20
|
Copyright © 2000-2012 - www.developpez.com