IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

Difficulté concernant la récupération de valeur dans un fichier xml


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Points : 91
    Points
    91
    Par défaut Difficulté concernant la récupération de valeur dans un fichier xml
    Bonjour,

    J’ai reçu un fichier XML généré directement depuis un programme que je ne connais pas mais il ne faut pas regarder très longtemps pour se dire que la structure n’est surement pas celle qui aurait été choisie par un humain.

    Voici un extrait de ce fichier qui fait 33000 lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    <?xml version="1.0" encoding="utf-8"?>
    <dataset  xmlns="http://developer.cognos.com/schemas/xmldata/1/"  xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
      <crosstab>
        <values>
          <value row="R1" col="C1">33198,99</value>
          <value row="R1" col="C2">-0,41052124</value>
          <value row="R1" col="C3">153115,08</value>
          <value row="R1" col="C4">-0,21965939</value>
          <value row="R1" col="C5">186314,07</value>
          <value row="R1" col="C6">252534,93</value>
          <value row="R1" col="C7">-0,26222456</value>
          <value row="R1" col="C8">252534,93</value>
          <value row="R2" col="C1">16978,91</value>
          <value row="R2" col="C2">-0,34900038</value>
          <value row="R2" col="C3">108897,44</value>
          <value row="R2" col="C4">-0,19221631</value>
          <value row="R2" col="C5">125876,35</value>
          <value row="R2" col="C6">160891,44</value>
          <value row="R2" col="C7">-0,21763178</value>
          <value row="R2" col="C8">160891,44</value>
          <value row="R3" col="C1">16220,08</value>
          <value row="R3" col="C2">-0,46358515</value>
          <value row="R3" col="C3">44217,64</value>
          <value row="R3" col="C4">-0,27990809</value>
          <value row="R3" col="C5">60437,72</value>
          <value row="R3" col="C6">91643,49</value>
          <value row="R3" col="C7">-0,34051268</value>
          <value row="R3" col="C8">91643,49</value>
          <value row="R4" col="C1">9221,33</value>
          <value row="R4" col="C2">-0,6142355</value>
          <value row="R4" col="C3">81048,61</value>
          <value row="R4" col="C4">-0,05473433</value>
          <value row="R4" col="C5">90269,94</value>
          <value row="R4" col="C6">109645,66</value>
          <value row="R4" col="C7">-0,17671215</value>
          <value row="R4" col="C8">109645,66</value>
          <value row="R5" col="C1">6028,13</value>
          <value row="R5" col="C2">-0,55627063</value>
          <value row="R5" col="C3">57160,02</value>
          <value row="R5" col="C4">0,23451714</value>
          <value row="R5" col="C5">63188,15</value>
          <value row="R5" col="C6">59886,67</value>
          <value row="R5" col="C7">0,0551288</value>
          <value row="R5" col="C8">59886,67</value>
          <value row="R6" col="C1">3193,2</value>
          <value row="R6" col="C2">-0,69054811</value>
          <value row="R6" col="C3">23888,59</value>
          <value row="R6" col="C4">-0,36991763</value>
          <value row="R6" col="C5">27081,79</value>
          <value row="R6" col="C6">48232,33</value>
          <value row="R6" col="C7">-0,43851375</value>
          <value row="R6" col="C8">48232,33</value>
          <value row="R7" col="C1">2762,25</value>
          <value row="R7" col="C2">0,26868756</value>
          <value row="R7" col="C3">4977,69</value>
          <value row="R7" col="C4">-0,88175022</value>
          <value row="R7" col="C5">7739,94</value>
          <value row="R7" col="C6">44271,96</value>
          <value row="R7" col="C7">-0,82517286</value>
          <value row="R7" col="C8">44271,96</value>
          <value row="R8" col="C1">0</value>
          <value row="R8" col="C2">-1</value>
          <value row="R8" col="C3">0</value>
          <value row="R8" col="C4">-1</value>
          <value row="R8" col="C5">0</value>
          <value row="R8" col="C6">29574,73</value>
          <value row="R8" col="C7">-1</value>
          <value row="R8" col="C8">29574,73</value>
          <value row="R9" col="C1">2762,25</value>
          <value row="R9" col="C2">/0</value>
          <value row="R9" col="C3">4977,69</value>
          <value row="R9" col="C4">-0,66131781</value>
          <value row="R9" col="C5">7739,94</value>
          <value row="R9" col="C6">14697,23</value>
          <value row="R9" col="C7">-0,47337423</value>
          <value row="R9" col="C8">14697,23</value>
          <value row="R10" col="C1">4995,33</value>
          <value row="R10" col="C2">/0</value>
          <value row="R10" col="C3">22871,14</value>
          <value row="R10" col="C4">2,27957131</value>
          <value row="R10" col="C5">27866,47</value>
          <value row="R10" col="C6">6973,82</value>
          <value row="R10" col="C7">2,99586884</value>
          <value row="R10" col="C8">6973,82</value>
          <value row="R11" col="C1">4825,46</value>
          <value row="R11" col="C2">/0</value>
          <value row="R11" col="C3">454,05</value>
          <value row="R11" col="C4">-0,73769043</value>
          <value row="R11" col="C5">5279,51</value>
          <value row="R11" col="C6">1730,97</value>
          <value row="R11" col="C7">2,05002975</value>
          <value row="R11" col="C8">1730,97</value>
          <value row="R12" col="C1">169,87</value>
          <value row="R12" col="C2">/0</value>
          <value row="R12" col="C3">5302,98</value>
          <value row="R12" col="C4">3,96412858</value>
          <value row="R12" col="C5">5472,85</value>
          <value row="R12" col="C6">1068,26</value>
          <value row="R12" col="C7">4,12314418</value>
          <value row="R12" col="C8">1068,26</value>
          <value row="R13" col="C1">0</value>
          <value row="R13" col="C2">/0</value>
          <value row="R13" col="C3">17114,11</value>
          <value row="R13" col="C4">3,09959062</value>
          <value row="R13" col="C5">17114,11</value>
          <value row="R13" col="C6">4174,59</value>
          <value row="R13" col="C7">3,09959062</value>
          <value row="R13" col="C8">4174,59</value>
          <value row="R14" col="C1">9583,5</value>
          <value row="R14" col="C2">-0,5718125</value>
          <value row="R14" col="C3">26170,52</value>
          <value row="R14" col="C4">-0,4443867</value>
          <value row="R14" col="C5">35754,02</value>
          <value row="R14" col="C6">69483,59</value>
          <value row="R14" col="C7">-0,48543217</value>
          <value row="R14" col="C8">69483,59</value>
          <value row="R15" col="C1">5084,24</value>
          <value row="R15" col="C2">-0,28328703</value>
          <value row="R15" col="C3">15462,11</value>
          <value row="R15" col="C4">0,87032754</value>
          <value row="R15" col="C5">20546,35</value>
          <value row="R15" col="C6">15360,89</value>
          <value row="R15" col="C7">0,33757549</value>
          <value row="R15" col="C8">15360,89</value>
          <value row="R16" col="C1">1552,34</value>
          <value row="R16" col="C2">2,02376407</value>
          <value row="R16" col="C3">2585,01</value>
          <value row="R16" col="C4">-0,57176652</value>
          <value row="R16" col="C5">4137,35</value>
          <value row="R16" col="C6">6549,83</value>
          <value row="R16" col="C7">-0,36832712</value>
          <value row="R16" col="C8">6549,83</value>
          <value row="R17" col="C1">0</value>
          <value row="R17" col="C2">-1</value>
          <value row="R17" col="C3">0</value>
          <value row="R17" col="C4">/0</value>
          <value row="R17" col="C5">0</value>
          <value row="R17" col="C6">249,18</value>
          <value row="R17" col="C7">-1</value>
          <value row="R17" col="C8">249,18</value>
        </values>
        <corner>
          <caption></caption>
        </corner>
        <columns>
          <colEdge>
            <caption>Periode 1</caption>
            <colEdge id="C1">
              <caption>Current Work Year</caption>
            </colEdge>
            <colEdge id="C2">
              <caption>% Growth</caption>
            </colEdge>
          </colEdge>
          <colEdge>
            <caption>Periode 2</caption>
            <colEdge id="C3">
              <caption>Current Work Year</caption>
            </colEdge>
            <colEdge id="C4">
              <caption>% Growth</caption>
            </colEdge>
          </colEdge>
          <colEdge id="C5">
            <caption>Current Work Year</caption>
          </colEdge>
          <colEdge id="C6">
            <caption>Previous Work Year</caption>
          </colEdge>
          <colEdge id="C7">
            <caption>% Growth</caption>
          </colEdge>
          <colEdge id="C8">
            <caption>Final previous Work Year</caption>
          </colEdge>
        </columns>
        <rows>
          <rowEdge>
            <caption>95686 Nom de l'établissement</caption>
            <rowEdge>
              <caption>Packages</caption>
              <rowEdge>
                <caption> </caption>
                <rowEdge>
                  <caption>Net</caption>
                  <rowEdge id="R1">
                    <caption>Total</caption>
                  </rowEdge>
                  <rowEdge id="R2">
                    <caption>Produits 1</caption>
                  </rowEdge>
                  <rowEdge id="R3">
                    <caption>Produits 2</caption>
                  </rowEdge>
                  <rowEdge id="R4">
                    <caption>Produits 3</caption>
                  </rowEdge>
                  <rowEdge id="R5">
                    <caption>Produits 4</caption>
                  </rowEdge>
                  <rowEdge id="R6">
                    <caption>Produits 5</caption>
                  </rowEdge>
                  <rowEdge id="R7">
                    <caption>Produits 6</caption>
                  </rowEdge>
                  <rowEdge id="R8">
                    <caption>Produits 7</caption>
                  </rowEdge>
                  <rowEdge id="R9">
                    <caption>Produits 8</caption>
                  </rowEdge>
                  <rowEdge id="R10">
                    <caption>Produits 9</caption>
                  </rowEdge>
                  <rowEdge id="R11">
                    <caption>Produits 10</caption>
                  </rowEdge>
                  <rowEdge id="R12">
                    <caption>Produits 11</caption>
                  </rowEdge>
                  <rowEdge id="R13">
                    <caption>Produits 12</caption>
                  </rowEdge>
                  <rowEdge id="R14">
                    <caption>Produits 13</caption>
                  </rowEdge>
                  <rowEdge id="R15">
                    <caption>Produits 1</caption>
                  </rowEdge>
                  <rowEdge id="R16">
                    <caption>Produits 1</caption>
                  </rowEdge>
                  <rowEdge id="R17">
                    <caption>Produits 1</caption>
                  </rowEdge>
                </rowEdge>
              </rowEdge>
            </rowEdge>
          </rowEdge>
        </rows>
      </crosstab>
    </dataset>
    L’objectif est de récupérer certaine valeur pour les stockées dans ma DB.
    Si on regarde ça comme un tableau, les id R1 à R17 représentent les lignes et le C1 à C8 représentent les colonnes.

    J’ai tout d’abord essayé en Xpath mais je tourne en rond et à part obtenir les ID… Il faut dire que je n’y connais pas grand-chose.

    Je fais donc ça : //@id

    Et j’obtiens C1,C2….R1,R2,R3…. RX

    Je suppose que si je récupère ses valeurs pour faire une requête comme ça //BBB[@row='R1' | //BBB[@col='b1']], j’obtiendrais la valeur en R1C1.

    Le problème, c’est que ça me semble hyper lourd non ? N’y a-t-il pas un moyen plus rapide et surtout moins lourd.

    Et aussi comment obtenir le nom de l’établissement correspondant a ces valeurs surtout vu le nombre de <caption> dans ce document…

    En gros, j’aimerai récupérer le nom de l’établissement et les valeurs.

    Comme ceci :

    Etablissement A
    R1C1 = 569
    R1C2=659
    R1C3=875
    etc…

    J’ai demandé un fichier avec une structure plus classique ou du moins des structures comme j’ai pu voir habituellement mais je pense que je peux toujours rêver.

    J’ai vu qu’il y avait le Xquery aussi et je suis en train de voir pour tester ça via AltovaXML mais mon programme de développement gère le Xpath donc j’aimerai le faire en direct et ne pas passer via un autre programme.

    Si quelqu’un peut m’aider, je lui en serai grandement reconnaissant.

    Amicalement,
    Raphaël.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    Le fichier doit être l'export XML d'un état Cognos, un tableau croisé dynamique dont les têtières et les libellés de lignes peuvent être complexes.
    Les données qui le composent provenant d'une BDD, il n'est pas très logique de s'appuyer sur un état pour alimenter une autre base. Mieux vaut renseigner la seconde base en requêtant sur la première.
    Si ce n'est pas possible, insiste pour obtenir des exports de requêtes ciblant plus précisément les données dont tu as besoin.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Points : 91
    Points
    91
    Par défaut
    Bonne rencontre,

    Merci pour ta réponse.

    Effectivement, il n'est pas possible d'attaquer directement cette base de données. Du moins, on ne me l'autorisera pas.

    Suite à ta réponse, je suis en train de réaliser un exemple de fichier XML que je vais réclamer.

    Pourriez-vous me dire s'il est correct vu que je débute sur le sujet et surtout que ça m'ennuierait de demander une structure non valide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    <?xml version="1.0"?>
    <nos_etablissements date="2007-2008">
    	<etablissement name="etablissement1" id="8956211">
    		<total periode="WINTER">33198,99</total>
    		<total periode="SUMMER">153115,08</total>
    		<produit1 periode="WINTER">16978,91</produit1>
    		<produit1 periode="SUMMER">108897,44</produit1>
    		<produit2 periode="WINTER">16220,08</produit2>
    		<produit2 periode="SUMMER">44217,64</produit2>
    		<produit3 periode="WINTER">9221,33</produit3>
    		<produit3 periode="SUMMER">81048,61</produit3>
    		<produit3a periode="WINTER">6028,13</produit3a>
    		<produit3a periode="SUMMER">57160,02</produit3a>
    		<produit3b periode="WINTER">3193,20</produit3b>
    		<produit3b periode="SUMMER">23888,59</produit3b>
    		<produit4 periode="WINTER">2762,25</produit4>
    		<produit4 periode="SUMMER">4977,69</produit4>
    		<produit4a periode="WINTER">0</produit4a>
    		<produit4a periode="SUMMER">0</produit4a>
    		<produit4b periode="WINTER">2762,25</produit4b>
    		<produit4b periode="SUMMER">4977,69</produit4b>
    		<produit5 periode="WINTER">4995,33</produit5>
    		<produit5 periode="SUMMER">22871,14</produit5>
    		<produit6 periode="WINTER">4825,46</produit6>
    		<produit6 periode="SUMMER">454,05</produit6>
    		<produit7 periode="WINTER">169,87</produit7>
    		<produit7 periode="SUMMER">5302,98</produit7>
    		<produit8 periode="WINTER">0</produit8>
    		<produit8 periode="SUMMER">17114,11</produit8>
    		<produit9 periode="WINTER">9583,50</produit9>
    		<produit9 periode="SUMMER">26170,52</produit9>
    		<produit10 periode="WINTER">5084,24</produit10>
    		<produit10 periode="SUMMER">15462,11</produit10>
    		<produit11 periode="WINTER">1552,34</produit11>		
    		<produit11 periode="SUMMER">2585,01</produit11>		
    		<produit12 periode="WINTER">0</produit12>
    		<produit12 periode="SUMMER">0</produit12>		
    	</etablissement>
    </nos_etablissements>
    Bon évidement ce n'est pas les bon nom. Produit est à remplacer par le nom, etc.

    Je pense que c'est une structure relativement classique et que je sais obtenir toutes les informations de cette manière.

    D'avance, merci.

    Raphaël.

  4. #4
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bonjour,

    ça m'ennuierait de demander une structure non valide
    en étant strict : tant que tu n'a pas de DTD ou de schema, il n'y a pas vraiment de notion de structure non valide en XML. Un document XML peut être interpréter comme un arbre c'est tout.
    autrement, pour un ensemble de données, tu peux avoir des arbres qui seront plus ou moins facile à manipuler suivant ce que tu veux en faire.

    Pour ne pas devoir manipuler une chaîne de caractères, je modifierais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <nosEtablissements dateDebut="2007" dateFin="2008">
    Enfin, je mettrais les valeurs d'attributs en minuscules : winter et summer
    A priori, il n'y a pas de raison d'utiliser des majuscules.

    Ce sont là des détails, l'essentiel est "je sais obtenir toutes les informations de cette manière."

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Points : 91
    Points
    91
    Par défaut
    Bonne rencontre,

    Tout d'abord, je te remercie d'avoir pris de ton temps pour me répondre.

    en étant strict : tant que tu n'a pas de DTD ou de schema, il n'y a pas vraiment de notion de structure non valide en XML. Un document XML peut être interpréter comme un arbre c'est tout.
    autrement, pour un ensemble de données, tu peux avoir des arbres qui seront plus ou moins facile à manipuler suivant ce que tu veux en faire.
    D'accord. Je pense qu'effectivement qu'avec ce genre de structure ça devrait tourner tout seul. Enfin tout seul, on se comprend.

    Je m'attaque au schema et au xsl aujourd'hui ou ce week-end. Pas de repos pour les braves.

    Le DTD d'après ce que j'ai lu commence a être remplacé par le schema, je préfère donc m'attaquer directement au schema.

    Pour ne pas devoir manipuler une chaîne de caractères, je modifierais
    Tout à fait, je modifie mon document.

    Enfin, je mettrais les valeurs d'attributs en minuscules : winter et summer
    A priori, il n'y a pas de raison d'utiliser des majuscules.
    Effectivement, il n'y a aucune raison.

    Par convention, on met toujours les noms des éléments et les attributs en minuscule ?

    Amicalement,
    Raphaël.

Discussions similaires

  1. Récupération de valeurs dans un fichier XML
    Par thisistheend dans le forum VBScript
    Réponses: 2
    Dernier message: 10/08/2012, 17h35
  2. récupération valeur dans un fichier XML
    Par lola79 dans le forum Langage
    Réponses: 14
    Dernier message: 20/04/2012, 12h20
  3. Réponses: 9
    Dernier message: 23/02/2012, 18h33
  4. [batch]récupération de valeur dans n fichiers
    Par Ted37 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 12/02/2009, 08h00
  5. Modifier une valeur dans un fichier xml
    Par arthrax dans le forum VBScript
    Réponses: 3
    Dernier message: 03/04/2007, 09h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo