A l'aide - pbm de comptage et de manipulation de chaines - XML/XSL - Programmation
Marsh Posté le 18-04-2006 à 19:39:31
En découpant le string avec les fonctions substring-before et/ou substring-after?
Marsh Posté le 18-04-2006 à 22:56:09
Merci, j'y ai penssé mais que faire ensuite du résultat du découpage ?
Marsh Posté le 19-04-2006 à 09:31:17
Je cherche, je cherche
il faudrait que j'arrive à compter les '\' dans une chaine
Marsh Posté le 19-04-2006 à 18:41:00
Et bien, tu comptes le nombre de fois que tu peux découper. Donc tu dois appeler récursivement le ton template en faisant +1 sur un paramètre. Quand tu ne peux plus découper tu renvois la valeur de ce paramètre.
Marsh Posté le 19-04-2006 à 22:52:49
merci pour l'info
tu n'a pas un lien internet , ou un bout de code pour cela ?
je ne suis pas tout a fait a l'aise avec xsl
Marsh Posté le 20-04-2006 à 17:46:42
Code :
|
Marsh Posté le 20-04-2006 à 17:50:31
je n'arrive toujours pas à couper une chaine de caractéres
ex XML : <fullname>l:\TRAVAIL\BTS_CPI\meca</fullname>
je veux extraire 'meca'
A l'aide
Marsh Posté le 20-04-2006 à 19:42:29
super, merci, ça me donne bien le nombre de '/' , mais il faut que je compte la longueur de 2 chaines et que je compare les 2 resultats afin de voir si je monte ou de descend dans l'arborescence
Je peux faire comment ?
Marsh Posté le 20-04-2006 à 20:38:17
En mettant le résultat de chaque appel dans une variable, et après il suffit de comparer:
Code :
|
Cela dit s'il te faut juste la fin, pas besoin de compter. Il suffit de renvoyer le dernier morceau du string ($str) à la place de $current.
Marsh Posté le 20-04-2006 à 23:16:37
merci beaucoup, je remet ça en forme ce week-end et je recapitule en donnant le code complet
Marsh Posté le 21-04-2006 à 13:33:04
j'ai encore un problème, le code suivant :
Code :
|
me renvoi :
l:\TRAVAIL\BTS_CPI\mecanique
l:\TRAVAIL\BTS_CPI\mecanique\Cinématique
l:\TRAVAIL\BTS_CPI\mecanique\Devoirs_TS1
a la boucle suivante :
l:\TRAVAIL\BTS_CPI\mecanique
l:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cine_Pt
l:\TRAVAIL\BTS_CPI\mecanique\Devoirs_TS1
puis
l:\TRAVAIL\BTS_CPI\mecanique
l:\TRAVAIL\BTS_CPI\mecanique\Devoirs_TS1
l:\TRAVAIL\BTS_CPI\mecanique\Devoirs_TS2
en fait <xsl:value-of select="preceding::fullname" /> ne semble pas me fournir le résultat que je cherche (c a d 'l:\TRAVAIL\BTS_CPI\mecanique\Cinématique' pour la boucle 2
c'est bizare car '<xsl:value-of select="following::fullname" />' marche bien
Marsh Posté le 21-04-2006 à 17:54:59
En fait c'est la structure de mon fichier xml qui est particuliére, elle ressebble a cela :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- Created with Catalogue version 4.2.3 [Soft Experience] -->
<involume name="DATA2" filesystem="NTFS" dategeneration = "21 Avril 2006 17:54">
<dir>
<id>1</id><name>dir</name><fullname>l:\Temp\Temp\test\dir</fullname>
<dir>
<id>2</id><name>dir1</name><fullname>l:\Temp\Temp\test\dir\dir1</fullname>
</dir>
<dir>
<id>3</id><name>dir2</name><fullname>l:\Temp\Temp\test\dir\dir2</fullname>
<dir>
<id>4</id><name>dir21</name><fullname>l:\Temp\Temp\test\dir\dir2\dir21</fullname>
</dir>
<dir>
<id>5</id><name>dir22</name><fullname>l:\Temp\Temp\test\dir\dir2\dir22</fullname>
</dir>
</dir>
<dir>
<id>6</id><name>dir3</name><fullname>l:\Temp\Temp\test\dir\dir3</fullname>
</dir>
</dir>
</involume>
il me faut jorsque je suis au niveau de dir21 par exemple pouvoir extraire le fullname de dir2 et de dir22
Marsh Posté le 23-04-2006 à 14:36:40
mon probleme a un peu evolué car j'ai du changer de type de menu
maintenant je dois a partir du fichier xml (voir post précedent) créer un fichier html qui ressemble a :
<ul>
<li>....</li>
<ul>
<li>...</li>
<li>...</li>
...
</ul>
</ul>
ce fichier reprend la structure et les imbrications du fichier xml
n'y a t'il pas une façon simble de s'y prendre ?
Marsh Posté le 23-04-2006 à 16:44:05
jai trouvé le bout de code suivant, ça fonctionne globalement sauf que de temps en temps il me crache en bloc tous un bout de mon fichier xml
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration ="yes" encoding="ISO-8859-1"/>
<xsl:template match="dir">
<LI CLASS="clsHasKids">menu
<UL>
<xsl:for-each select="file">
<LI>
<xsl:value-of select="fullname"/>
</LI>
</xsl:for-each>
<xsl:if test="dir"><xsl:apply-templates /></xsl:if>
</UL>
</LI>
</xsl:template>
</xsl:stylesheet>
extrait de la sortie :
<LI CLASS="clsHasKids">menu
<UL>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\A4_Meca.sdw</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\A4_Meca_Cours_RDM.sxw</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\A4_Meca_QuestionCours.sdw</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Bilan_poly_présent_TD_TP.sxc</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\descript.ion</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Dev_meca_Base.sdw</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\elements_de_la_gallerie_meca.sxd</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\essai%20temp.odb</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\MecaCommandeSoupages.txt</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\MecaComSoupapes.png</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Palan_Manuel.sdw</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\TS_CPI_Méca.sdd</LI>1mecaniquel:\TRAVAIL\BTS_CPI\mecanique2sdwA4_Meca.sdwl:\TRAVAIL\BTS_CPI\mecanique\A4_Meca.sdwA4_Meca.sdw16896a2000/01/10 15:162000/01/10 15:162006/04/21 17:522000/01/10 15:16Stephane Le MarecStephane Le Marec13sxwA4_Meca_Cours_RDM.sxwl:\TRAVAIL\BTS_CPI\mecanique\A4_Meca_Cours_RDM.sxwA4_MEC~1.SXW67754a2000-01-10T16:16:202005-09-08T10:18:382005-09-05T19:15:18PT10H33M7SOpenOffice.org 1.1.4 (Win32)Stephane Le Marecfr-FR531065160Info 0Info 1Info 2Info 34sdwA4_Meca_QuestionCours.sdwl:\TRAVAIL\BTS_CPI\mecanique\A4_Meca_QuestionCours.sdwA4_MEC~1.SDW16896a2000/01/10 14:162003/10/13 09:012006/04/21 17:522003/10/13 09:01Stephane Le Marec15sxcBilan_poly_présent_TD_TP.sxcl:\TRAVAIL\BTS_CPI\mecanique\Bilan_poly_présent_TD_TP.sxcBILAN_~1.SXC5653a2005-08-30T14:56:532005-08-30T15:09:30PT12M41SOpenOffice.org 1.1.4 (Win32)fr-FR4318Info 1Info 2Info 3Info 46iondescript.ionl:\TRAVAIL\BTS_CPI\mecanique\descript.iondescript.ion20ah2006/04/20 15:112006/04/20 15:112006/04/22 20:247sdwDev_meca_Base.sdwl:\TRAVAIL\BTS_CPI\mecanique\Dev_meca_Base.sdwDEV_ME~1.SDW17920a2000/02/10 14:192004/03/06 13:022006/04/21 17:522002/04/29 13:1701:46Stephane Le Marec118sxdelements_de_la_gallerie_meca.sxdl:\TRAVAIL\BTS_CPI\mecanique\elements_de_la_gallerie_meca.sxdELEMEN~1.SXD7937a2005-09-29T19:26:492005-09-29T20:10:04PT14M28SOpenOffice.org 1.1.4 (Win32)fr-FR538Info 1Info 2Info 3Info 49odbessai temp.odbl:\TRAVAIL\BTS_CPI\mecanique\essai%20temp.odbESSAIT~1.ODB4895a2006/04/06 16:012006/04/06 16:032006/04/21 17:2310txtMecaCommandeSoupages.txtl:\TRAVAIL\BTS_CPI\mecanique\MecaCommandeSoupages.txtMECACO~1.TXT1280a2006/02/06 20:132001/11/10 16:362006/04/21 17:2311pngMecaComSoupapes.pngl:\TRAVAIL\BTS_CPI\mecanique\MecaComSoupapes.pngMECACO~1.PNG472860a2006/02/06 20:132001/11/10 16:002006/04/21 17:4512sdwPalan_Manuel.sdwl:\TRAVAIL\BTS_CPI\mecanique\Palan_Manuel.sdwPALAN_~1.SDW80384a2000/01/06 07:392002/01/11 11:482006/04/21 17:522002/01/11 11:1301:27Stephane Le Marec613sddTS_CPI_Méca.sddl:\TRAVAIL\BTS_CPI\mecanique\TS_CPI_Méca.sddTS_CPI~1.SDD21504a1998/11/14 13:041998/11/14 13:042006/04/21 17:521998/11/14 13:0400:08le marec stephanele marec stephane2<LI CLASS="clsHasKids">menu
<UL>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Cinématique\(Cours_Cinematique_Composition de mouvements.sdw).pdf</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cinematique_prov.doc</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cours_Cinématique_Composition%20de%20mouvements.sdw</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cours_Cinématique_Transparent_Rappel_VitesseAccel_MvtDeRotation.sdw</LI>14Cinématiquel:\TRAVAIL\BTS_CPI\mecanique\Cinématique15pdf(Cours_Cinematique_Composition de mouvements.sdw).pdfl:\TRAVAIL\BTS_CPI\mecanique\Cinématique\(Cours_Cinematique_Composition de mouvements.sdw).pdf(COURS~1.PDF869505a2006/02/06 20:132004/09/09 15:482006/04/22 20:141.3falseamiga562004/09/09 15:47:172004/09/09 15:47:17PDFCreator Version 0.8.0GNU Ghostscript 7.05(Cours_Cinematique_Composition de mouvements.sdw)116docCinematique_prov.docl:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cinematique_prov.docCINEMA~1.DOC8192a2006/02/06 20:132002/11/11 11:422006/04/22 15:3717sdwCours_Cinématique_Composition de mouvements.sdwl:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cours_Cinématique_Composition%20de%20mouvements.sdwCOURS_~1.SDW46080a2000/01/10 14:162004/09/09 14:122006/04/22 15:372004/09/09 13:4701:33Stephane Le Marec518sdwCours_Cinématique_Transparent_Rappel_VitesseAccel_MvtDeRotation.sdwl:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cours_Cinématique_Transparent_Rappel_VitesseAccel_MvtDeRotation.sdwCOURS_~2.SDW43008a2000/01/10 14:162004/09/13 11:272006/04/22 20:162004/09/13 11:2704:33Stephane Le Marec10<LI CLASS="clsHasKids">menu
<UL>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cine_Pt\Cinematique_Point.sdw</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cine_Pt\Devcinematique.txt</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cine_Pt\DevCinematiquePt.png</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cine_Pt\DevCinematiquePt_2.png</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cine_Pt\Dev_CinematiquePt.sdw</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cine_Pt\Dev_CinematiquePt2.sdw</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cine_Pt\TD_Cinematique_Point.sdw</LI>
<LI>l:\TRAVAIL\BTS_CPI\mecanique\Cinématique\Cine_Pt\TD_Cinematique_Point.sdw.pdf</LI>
</UL>
</LI>
</UL>
</LI>
Marsh Posté le 18-04-2006 à 16:31:24
Bonjour, j'ai un problème de codage, à partir d'un fichier XML donné en 'annexe 1' (extrait) je veux generé un fichier du type 'annexe2' qui contient des appel à des fonctions en javascript pour créer des menus sur une page html (menu que je veux créer automatiquement)
Mon fichier xsl est donné en 'annexe3', je n'ai pas de probleme pour créer les 'menu.addParent' (repertoires d'un disque dur) ni les 'menu.addChild' (fichiers sur le disque dur) mais pour l'instant je n'arrive pas a créer les 'menu.addSousParent' qui sont des sous-repertoires du dique dur
En fait je n'arrive pas a faire la distinction entre un repertoire et un sous repertoire (voir ligne 2 de annexe 1)
il faudrait que j'arrive a compter les '\' ??? !!! mais comment
Derniere info : je ne peut pas modifier le XML, il est généré automatiquement
Merci pour toute aide !
ANNEXE 1 :
<dir>
<id>1</id><name>mecanique</name><fullname>l:\TRAVAIL\BTS_CPI\mecanique</fullname>
<file>
<id>2</id>
<extension>sdw</extension>
<name>A4_Meca.sdw</name>
<fullname>l:\TRAVAIL\BTS_CPI\mecanique\A4_Meca.sdw</fullname>
<shortname>A4_Meca.sdw</shortname>
<size>16896</size>
<attributes>a</attributes>
<datetime>
<creation>2000/01/10 15:16</creation>
<lastsave>2000/01/10 15:16</lastsave>
<lastaccess>2006/04/17 10:52</lastaccess>
<lastprint>2000/01/10 15:16</lastprint>
</datetime>
<summary><author>Stephane Le Marec</author><lastauthor>Stephane Le Marec</lastauthor><revisions>1</revisions></summary>
</file>
ANNEXE 2 :
menu.addParent("Node 1","page1.html" );
menu.addChild("Lien 1","page1.html" );
menu.addSousParent("Node 11","" );
menu.addChild("Lien 1","page1.html" );
menu.addChild("Lien 2","page2.html" );
menu.addSousParent("Node 111","" );
menu.addChild("Lien 1","page1.html" );
ANNEXE3 :
<xsl:for-each select="//dir">
menu.addParent("<xsl:value-of select="name"/>" );
<xsl:for-each select="./file">
<xsl:if test="extension[.='sxw'] or extension[.='odt'] or extension[.='pdf']" >
<br/>
menu.addChild("<xsl:value-of select="name"/>","file:///<xsl:value-of select="translate(fullname,'\','/')"/>" );
<br/>
</xsl:if>
</xsl:for-each>
</xsl:for-each>