Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1603 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  A l'aide - pbm de comptage et de manipulation de chaines

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

A l'aide - pbm de comptage et de manipulation de chaines

n°1348988
amiga56
Posté le 18-04-2006 à 16:31:24  profilanswer
 

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>

mood
Publicité
Posté le 18-04-2006 à 16:31:24  profilanswer
 

n°1349140
rx__
Paint It Black
Posté le 18-04-2006 à 19:39:31  profilanswer
 

En découpant le string avec les fonctions substring-before et/ou substring-after?

n°1349245
amiga56
Posté le 18-04-2006 à 22:56:09  profilanswer
 

Merci, j'y ai penssé mais que faire ensuite du résultat du découpage ?

n°1349351
amiga56
Posté le 19-04-2006 à 09:31:17  profilanswer
 

Je cherche, je cherche
 
il faudrait que j'arrive à compter les '\' dans une chaine

n°1349987
rx__
Paint It Black
Posté le 19-04-2006 à 18:41:00  profilanswer
 

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.

n°1350122
amiga56
Posté le 19-04-2006 à 22:52:49  profilanswer
 

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

n°1350677
rx__
Paint It Black
Posté le 20-04-2006 à 17:46:42  profilanswer
 

Code :
  1. <?xml version="1.0" ?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" />
  4. <xsl:template match="/">
  5. <xsl:call-template name="countSlash">
  6.  <xsl:with-param name="str">/dir1/dir2/dir3/file</xsl:with-param>
  7. </xsl:call-template>
  8. </xsl:template>
  9. <xsl:template name="countSlash">
  10. <xsl:param name="str" />
  11. <xsl:param name="current" select="0" />
  12. <xsl:choose>
  13.  <xsl:when test="contains($str, '/')">
  14.   <xsl:call-template name="countSlash">
  15.    <xsl:with-param name="str" select="substring-after($str, '/')" />
  16.    <xsl:with-param name="current" select="$current + 1" />
  17.   </xsl:call-template>
  18.  </xsl:when>
  19.  <xsl:otherwise>
  20.   <xsl:value-of select="$current" />
  21.  </xsl:otherwise>
  22. </xsl:choose>
  23. </xsl:template>
  24. </xsl:stylesheet>

n°1350679
amiga56
Posté le 20-04-2006 à 17:50:31  profilanswer
 

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

n°1350750
amiga56
Posté le 20-04-2006 à 19:42:29  profilanswer
 

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 ?

n°1350776
rx__
Paint It Black
Posté le 20-04-2006 à 20:38:17  profilanswer
 

En mettant le résultat de chaque appel dans une variable, et après il suffit de comparer:

Code :
  1. <xsl:variable name="foo">
  2.         <xsl:call-template name="countSlash">
  3.                 <xsl:with-param name="str">/dir1/dir2/dir3/file</xsl:with-param>
  4.         </xsl:call-template>
  5. </xsl:variable>


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.

mood
Publicité
Posté le 20-04-2006 à 20:38:17  profilanswer
 

n°1350874
amiga56
Posté le 20-04-2006 à 23:16:37  profilanswer
 

merci beaucoup, je remet ça en forme ce week-end et je recapitule en donnant le code complet

n°1351191
amiga56
Posté le 21-04-2006 à 13:33:04  profilanswer
 

j'ai encore un problème, le code suivant :
 

Code :
  1. <xsl:for-each select="//dir">  
  2. <xsl:value-of select="preceding::fullname" /><br/>
  3. <xsl:value-of select="fullname" /><br/>
  4. <xsl:value-of select="following::fullname" /><br/>
  5. ...


 
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


Message édité par amiga56 le 21-04-2006 à 13:35:29
n°1351471
amiga56
Posté le 21-04-2006 à 17:54:59  profilanswer
 

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


Message édité par amiga56 le 21-04-2006 à 17:57:41
n°1352197
amiga56
Posté le 23-04-2006 à 14:36:40  profilanswer
 

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 ?

n°1352252
amiga56
Posté le 23-04-2006 à 16:44:05  profilanswer
 

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>


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  A l'aide - pbm de comptage et de manipulation de chaines

 

Sujets relatifs
[AIDE] Fichier executableaide calcule de moyenne
[Aide decompil/compil d'un ExeBoucle For qui s'arrete a i+1 - A l'aide please
[RESOLU] VBS : demande d'aide suppression de fichier selon leur dateAIDE Javascript
Aide Javascript Expression regaide sur filtre automatique
Besois d'aide sur les états car tres debutantAide fonction Dir (VBA)
Plus de sujets relatifs à : A l'aide - pbm de comptage et de manipulation de chaines


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR