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

  FORUM HardWare.fr
  Programmation
  XML/XSL

  [XML]-[XSL] Référence interfichiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[XML]-[XSL] Référence interfichiers

n°1164543
tatiana17
Posté le 29-07-2005 à 11:58:59  profilanswer
 

J'ai deux fichiers XML:
je voulais savoir comment faire pour parcourir deux fichiers XML à l'aide d'une même feuille de style
Mon but serait de parcourir mon premier fichier et à chaque élement récupérer son type contenu dans le
second fichier (dans Doc/TYPE/TResources/Attributes) puis à l'aide de cet attribut récupérer son type(Doc/TYPE).
 
exemple
--------------
on aura alors a l'affichage
        PModule
        Type=String
        Value=Module.xml
 
j'espère mettre bien exprimer et que quelqu'un peux m'éclairer.je suis en stage et ca bloque mon travail.
 
fichier1.xml
--------------------------------------------------------------------------------------
<Value>
   <PResources>
      <PModule Value="Module.xml"/>
      <PReference Value="RefFile.xml"/>
      <PTarget Value="RefTarget.xml"/>
      <PTolerance>
         <PPourcentageTolerance Value="5"/>
         <PToleranceMin Value="30"/>
         <PToleranceMax Value="80"/>
         <PPourcentageTolTemps Value="15"/>
      </PTolerance>
     
   </PResources>
</Value>
 
 
 
fichier2.xml
--------------------------------------------------------------------------------------
<Doc>
   <TYPE>
      <TModule Type="String"  Default="DicoMresIDataEn.xml"/>
      <TReference Type="String"  Default="RefFileTransmitter.xml"/>
      <TTarget Type="String"  Default="RefFileTarget.xml"/>
      <TPourcentageTolerance Type="Double"  Default="1.0" />
      <TPourcentageTolTemps Type="Double"  Default="2.0" />
      <TToleranceMax Type="Double"  Default="8" />
      <TToleranceMin Type="Double"  Default="35" />
      <TTolerance Type="Struct" >
         <attributes>
            <PPourcentageTolerance Type="TPourcentageTolerance"/>
            <PToleranceMin Type="TToleranceMin"/>
            <PToleranceMax Type="TToleranceMax"/>
            <PPourcentageTolTemps Type="TPourcentageTolTemps"/>
         </Attributes>
      </TTolerance>
       <TResources Type="Struct" Label="Ressources">
         <attributes>
            <PModule Type="TModule"/>
            <PReference Type="TReference"/>
            <PTarget Type="TTarget"/>
            <PTolerance Type="TTolerance"/>
          </Attributes>
      </TResources>
   </TYPE>
   <VAR>
      <PResources Type="TResources"/>
   </VAR>
</Doc>
--------------------------------------------------------------------------------------
voila ce que j'ai essayé de faire
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
 
 
<xsl:variable name="dico" select="document('fichier2.xml')"/>
 
 
<xsl:for-each select="Value//*">
        <xsl:variable name="p" select="name()"/>
                <xsl:value-of select ="$p"/>
        <br></br>
                 
        <xsl:for-each select="$dico/Dico/TYPEDEF/TResources/Attributes//*">
        <xsl:value-of select ="name()"/>
                <xsl:variable name="t" select="name()"/>
                <xsl:for-each select="@*">
                </xsl:for-each>        
                <xsl:value-of select ="$t"/>
                 
                 
         
                <xsl:if test="'$t'='$p'">
                        ...
                </xsl:if>
        </xsl:for-each>        
 
                   
</xsl:for-each>
 
 
 
</xsl:template>
</xsl:stylesheet>

mood
Publicité
Posté le 29-07-2005 à 11:58:59  profilanswer
 

n°1164545
FlorentG
Posté le 29-07-2005 à 12:00:12  profilanswer
 

C'est à peu près ça, via la variable dico tu peux récupérer ce que tu veux :)

n°1167631
tatiana17
Posté le 02-08-2005 à 10:57:08  profilanswer
 

J'ai un autre problème. ma boucle pour le traitement des listes ne marche pas.
Je remets les codes
 
fichier1.xml
--------------------------------------------------------------------------------------

Code :
  1. <Value>
  2.    <PResources>
  3.       <PModule Value="Module.xml"/>
  4.       <PReference Value="RefFile.xml"/>
  5.       <PTarget Value="RefTarget.xml"/>
  6.       <PTolerance>
  7.          <PPourcentageTolerance Value="5"/>
  8.          <PToleranceMin Value="30"/>
  9.          <PToleranceMax Value="80"/>
  10.          <PPourcentageTolTemps Value="15"/>
  11.       </PTolerance>
  12.       <PList>
  13. <PTolerance>
  14.          <PPourcentageTolerance Value="5"/>
  15.          <PToleranceMin Value="30"/>
  16.          <PToleranceMax Value="80"/>
  17.          <PPourcentageTolTemps Value="15"/>
  18.         </PTolerance>
  19.         <PTolerance>
  20.          <PPourcentageTolerance Value="52"/>
  21.          <PToleranceMin Value="35"/>
  22.          <PToleranceMax Value="85"/>
  23.          <PPourcentageTolTemps Value="12"/>
  24.         </PTolerance>
  25.       <PList>
  26.     </PResources>
  27. </Value>


fichier2.xml
--------------------------------------------------------------------------------------

Code :
  1. <Doc>
  2.    <TYPE>
  3.       <TModule Type="String"  Default="DicoMresIDataEn.xml"/>
  4.       <TReference Type="String"  Default="RefFileTransmitter.xml"/>
  5.       <TTarget Type="String"  Default="RefFileTarget.xml"/>
  6.       <TPourcentageTolerance Type="Double"  Default="1.0" />
  7.       <TPourcentageTolTemps Type="Double"  Default="2.0" />
  8.       <TToleranceMax Type="Double"  Default="8" />
  9.       <TToleranceMin Type="Double"  Default="35" />
  10.       <TTolerance Type="Struct" >
  11.          <Attributes>
  12.             <PPourcentageTolerance Type="TPourcentageTolerance"/>
  13.             <PToleranceMin Type="TToleranceMin"/>
  14.             <PToleranceMax Type="TToleranceMax"/>
  15.             <PPourcentageTolTemps Type="TPourcentageTolTemps"/>
  16.          </Attributes>
  17.       </TTolerance>
  18.         <TList Type="List" Name="TTolerance"/>
  19. <TResources Type="Struct" Label="Ressources">
  20.          <Attributes>
  21.             <PModule Type="TModule"/>
  22.             <PReference Type="TReference"/>
  23.             <PTarget Type="TTarget"/>
  24.             <PTolerance Type="TTolerance"/>
  25.     <PList Type="TList">   
  26.  </Attributes>
  27.       </TResources>
  28.    </TYPE>
  29.    <VAR>
  30.       <PResources Type="TResources"/>
  31.    </VAR>
  32. </Doc>


 
--------------------------------------------------------------------------------------
voila ce que j'ai essayé de faire
j'ai un problème avec la gestion des listes.Ca ne rentre pas dans la boucle
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  3. <xsl:template match="/">
  4. <xsl:variable name="dico" select="document('DicoMsrDataEn.xml')"/>
  5. <HTML>
  6. <HEAD>
  7. <title>
  8. VALUE
  9. </title>
  10. </HEAD>
  11.   
  12. <BODY>
  13. <xsl:for-each select="Value//*">  
  14. <xsl:variable name="nomP" select="name()"/>  
  15.  
  16. <xsl:variable name="value" select="@Value"/>  
  17. <xsl:variable name="noeudType" select="$dico//*[name()=$nomP]"/>  
  18.  
  19. <!--fichier Dico-->  
  20.  <xsl:variable name="Type" select="$noeudType/@Type"/>
  21.  <xsl:variable name="selection" select="$dico//*[name()=$Type]"/>  
  22.  <xsl:variable name="type" select="$selection/@Type"/>
  23.  <xsl:variable name="label" select="$selection/@Label"/>
  24.  <xsl:variable name="unit" select="$selection/@Unit"/>
  25.  <xsl:variable name="Param" select="$selection/@Name"/>
  26.  
  27.  <xsl:if test="$type='String'">
  28.   <br></br>
  29.   <u><b><xsl:value-of select ="$label"/>:</b></u><xsl:value-of select ="$value"/>
  30.  </xsl:if>
  31.  <xsl:if test="$type='Double'">
  32.   <br></br>
  33.   <u><b><xsl:value-of select ="$label"/>:</b></u><xsl:value-of select ="$value"/><xsl:value-of select ="$unit"/>
  34.  </xsl:if>
  35.  
  36.  <xsl:if test="$type='Boolean'">
  37.   <br></br>
  38.   <u><b><xsl:value-of select ="$label"/>:</b></u><xsl:value-of select ="$value"/>
  39.  </xsl:if>
  40.  
  41.  <xsl:if test="$type='Integer'">
  42.   <br></br>
  43.   <u><b><xsl:value-of select ="$label"/>:</b></u><xsl:value-of select ="$value"/><xsl:value-of select ="$unit"/>
  44.  </xsl:if>
  45.  
  46.      
  47.  <xsl:if test="$type='List'">
  48.   <br></br>
  49.   <xsl:value-of select ="$Param"/>
  50.   <xsl:variable name="noeudList" select="Value//*[name()=$Param]"/>  
  51.    
  52.    <xsl:for-each select="$noeudList">  
  53.      <br></br>
  54.      
  55.    </xsl:for-each>
  56.  
  57.  </xsl:if>
  58.  
  59. </xsl:for-each>
  60. </BODY>
  61. </HTML>
  62.  
  63. </xsl:template>
  64. </xsl:stylesheet>

n°1167664
avander
Posté le 02-08-2005 à 11:15:32  profilanswer
 

Pourquoi tu essaies de pondre un seul template de la mort qui tue?  
 
Pourquoi ne pas décomposer le problème en sous-problèmes ( il faut diviser pour règner disait un illustre inconnu)... l'esprit XSLT c'est beaucoup de petits templates simples qui travaillent ensemble et produisent ainsi une solution à des problèmes complexes de façon simple et lisible...  
 
des gros templates truffé de for-each ça donne pas vraiment envie de s'y mettre...
 
 

n°1167730
tatiana17
Posté le 02-08-2005 à 11:59:52  profilanswer
 

ok t'as raison
je vais essayer .

n°1167785
avander
Posté le 02-08-2005 à 12:35:38  profilanswer
 

<xsl:for-each select="Value//*">


 
Tu veux traiter tous les elements qui ont un attribut 'Value' ou je me plante?
 
détail pratique: les listing vaut mieux éviter le numérotage des lignes pcq. pour t'aider faut déjà se tapper le nettoyage du code  :sweat:
 
bon a savoir: dans la ligne 25 du premier xml la balise n'est pas fermée ( comme quoi le numérotage peut être pratique ;-)
 
ben oui c'est moi qui me plante... Value c'est le root de ton xml... le for-each est inutile à moins de vouloir brouiller les pistes... CQFD


Message édité par avander le 02-08-2005 à 12:47:53
n°1167837
tatiana17
Posté le 02-08-2005 à 13:51:22  profilanswer
 

non en fait c pour parcourir toutes les balises, vu que je récupère leur type.

n°1167927
avander
Posté le 02-08-2005 à 15:04:38  profilanswer
 

Ben la bonne nouvelle c'est que ton stylesheet à bien l'air de fonctionner... une fois qu'on a réparé la balise PList à la ligne 25 du dico ( elle est pas fermée), j'obtiens un résultat ( pas très clair d'ailleurs) pour chaque balise PList y compris...  
 
Si tu nous donnais un exemple de ce que tu veux obtenir en sortie parce que sans cela il est difficile de juger si la façon dont tu t'y prends est valable...  
 

n°1168029
tatiana17
Posté le 02-08-2005 à 15:57:26  profilanswer
 

Oui ca marche (j'avais essayé avant de poster le message)
Pour les type "double" et "string" on récupère et on affiche
bien la valeur.
mais la ou je bloque c'est pour le traitement  
du type "LIST".
Je veux crééer un tableau:
on aurait avec ca
<PList>      
     <PTolerance>
          <PPourcentageTolerance Value="5"/>
          <PToleranceMin Value="30"/>
          </PTolerance>
         <PTolerance>
          <PPourcentageTolerance Value="52"/>
          <PToleranceMin Value="35"/>
          </PTolerance>    
       <PList>    
 
un tableau du genre
 
           PPourcentageTolerance    PToleranceMin
PTolerance      5                          30
PTolerance      52                         35
 
La génération du tableau doit etre dependante des données
(le nommage des colonnes correspond aux balises et se fait  
automatiquement).
Voila ou je bloque

n°1168133
avander
Posté le 02-08-2005 à 17:26:24  profilanswer
 

La génération d'une table en fonction de la structure xml ne pose pas vraiment de problèmes ( c'est assez classique et tu trouveras des exemples en faisant qq recherchers sur HFR ou ailleurs...  
 
Avec l'approche 'push' ( le gros template qui doit s'occuper de tout) toutefois on tombe sur un os... une fois le tableau généré il va falloir éviter les 'enfants' de la liste dans la suite du traitement ( puisqu'ils figurent déjà dans le tableau)... donc en continuant dans cette voie il va falloir en plus pondre du code pour éviter ce problème...
 
est-ce que l'xml en entrée est fixe ou variable, dispose-t-il d'un schema ou une DTD? Si il est fixe rien n'empêche de l'éclater et d'écrire un stylesheet plus spécifique...  
 
 
 
 
 
 

mood
Publicité
Posté le 02-08-2005 à 17:26:24  profilanswer
 

n°1168218
tatiana17
Posté le 02-08-2005 à 19:13:22  profilanswer
 

L'XML en entrée est variable. Il ne dispose pas de schéma ni de DTD.
Tout comme toi, je me suis posé le problème des 'enfants' à  
éviter...


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

  [XML]-[XSL] Référence interfichiers

 

Sujets relatifs
Cherche Parseur XMLSQL Server et le XML
PHP fait n'importe quoi avec les XML dès qu'ils dépassent 200 ko ?[XML]-[XSL] JS
link error - undefined reference to `std::ios_base::Init::Init()'problème de référence ou version ou ...
XML XSL-FOBcp et XML
XML parcour d'un fichier XML sous Windev 
Plus de sujets relatifs à : [XML]-[XSL] Référence interfichiers


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