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

Développement SQL Server Discussion :

Récupération XML en tabulaire


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 29
    Points : 39
    Points
    39
    Par défaut Récupération XML en tabulaire
    Bonjour,

    Je souhaite récupérer les informations issues d'un fichier XML de parcelles agricoles (télépac) pour les retraiter ensuite. Dans le premier temps, je souhaiterais les avoir en table.


    Voici le code de départ (un petit bout)

    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
    <producteurs xmlns="urn:x-telepac:fr.gouv.agriculture.telepac:echange-producteur" xmlns:gml="http://www.opengis.net/gml">
      <producteur numero-pacage="056021200">
        <rpg>
          <ilot numero-ilot="2">
            <geometrie>
              <gml:Polygon>
                <gml:outerBoundaryIs>
                  <gml:LinearRing>
                    <gml:coordinates>271920.978,6769007.1 271916.723,6769004.051 271907.183,6768997.214 271889.611,6768990.472 271842.314,6768988.008 271781.649,6768989.409 271759.782,6768990.396 271747.077,6768989.92 271920.978,6769007.1</gml:coordinates>
                  </gml:LinearRing>
                </gml:outerBoundaryIs>
              </gml:Polygon>
            </geometrie>
            <commune>75000</commune>
            <surface-reference>623</surface-reference>
            <surface-attribuee>623</surface-attribuee>
            <parcelles>
              <parcelle>
                <geometrie>
                  <gml:Polygon>
                    <gml:outerBoundaryIs>
                      <gml:LinearRing>
                        <gml:coordinates>271851.486,6769218.693 271866.195,6769214.429 271832.473,6769094.999 271817.657,6769098.88 271817.657,6769099.585 271851.486,6769218.693</gml:coordinates>
                      </gml:LinearRing>
                    </gml:outerBoundaryIs>
                  </gml:Polygon>
                </geometrie>
                <s2 numero-parcelle="1" localisee-indicative="false">
                  <culture code-culture="AU" />
                  <surface-declaree>19</surface-declaree>
                </s2>
              </parcelle>
              <parcelle>
                <geometrie>
                  <gml:Polygon>
                    <gml:outerBoundaryIs>
                      <gml:LinearRing>
                        <gml:coordinates>271889.561,6769207.656 271905.011,6769203.178 271871.631,6769084.416 271857.52,6769088.649 271889.561,6769207.656</gml:coordinates>
                      </gml:LinearRing>
                    </gml:outerBoundaryIs>
                  </gml:Polygon>
                </geometrie>
                <s2 numero-parcelle="2" localisee-indicative="false">
                  <culture code-culture="AU" />
                  <surface-declaree>19</surface-declaree>
                </s2>
              </parcelle>
              <parcelle>
                <geometrie>
                  <gml:Polygon>
                    <gml:outerBoundaryIs>
                      <gml:LinearRing>
                        <gml:coordinates>271918.233,6769015.392 271920.978,6769007.1 271916.723,6769004.051 271907.183,6768997.214 271889.611,6768990.472  271918.233,6769015.392</gml:coordinates>
                      </gml:LinearRing>
                    </gml:outerBoundaryIs>
                  </gml:Polygon>
                </geometrie>
                <s2 numero-parcelle="3" localisee-indicative="false">
                  <culture code-culture="BH" />
                  <surface-declaree>197</surface-declaree>
                </s2>
              </parcelle>
              <parcelle>
                <geometrie>
                  <gml:Polygon>
                    <gml:outerBoundaryIs>
                      <gml:LinearRing>
                        <gml:coordinates>271298.373,6769095.664 271298.379,6769095.077 271298.489,6769085.017 271298.475,6769084.591 271296.927,6769063.771 271298.373,6769095.664</gml:coordinates>
                      </gml:LinearRing>
                    </gml:outerBoundaryIs>
                  </gml:Polygon>
                </geometrie>
                <s2 numero-parcelle="53" localisee-indicative="false">
                  <culture code-culture="PT" />
                  <surface-declaree>38</surface-declaree>
                </s2>
              </parcelle>
            </parcelles>
          </ilot>
        </rpg>
      </producteur>
    </producteurs>
    Le plus proche de ce que je souhaite me semble être :
    http://blog.developpez.com/sqlpro/p1...vec-sql-server

    Par contre, je n'arrive pas à récupérer les valeurs de toutes les balises (notamment les cultures ou les numéros de pacage), la structure xml me semble compliquée avec une partie vers les données géographiques et une autre sur la description de la parcelle et je n'arrive pas à séparer tout ça proprement.

    Merci de votre aide

    Didou139

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 565
    Points
    52 565
    Billets dans le blog
    5
    Par défaut
    Vos différentes balises à récupérer n'étant pas à la même hauteur hiérarchique vous ne pouvez pas utiliser la solution que j'ai donné.

    le plus simple est d'intégrer vos fichiers XML dans une table pourvue d'une colonne XML; puis d'indexer le XML, puis de créer autant de vues que nécessaire pour chaque partie de balises de même hauteur hiérarchique, puis d'assembler ces vues en une super vue et enfin de l'utiliser pour alimenter votre table.

    Au final tout ceci encapsulé dans une procédure vous fera une solution performante et efficace !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 29
    Points : 39
    Points
    39
    Par défaut Question supplémentaire
    Bonjour SQLPro,

    Merci de votre aide. Effectivement, votre proposition me conviendrait tout à fait et il me semblait que cela correspondait à votre post ci-dessus. Par contre, cela ne fonctionne pas. Quand j'applique le code partie 2 : on peut obtenir chaque niveau séparement a : premier niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT X.XML_ID,
            Txml.XMLdata.VALUE('fn:local-name(.)', 'NVARCHAR(64)') AS BALISE,
            Txml.XMLdata.VALUE('.', 'NVARCHAR(256)') AS VALEUR
    FROM   T_XML AS X
            OUTER APPLY X.XML_DATA.nodes('*') AS Txml(XMLdata);
    J'obtiens la bonne balise (producteurs) mais la valeur est la suite des coordonnées géométriques qu'on trouve après la balise gml:coordinates et je ne comprends pas pourquoi.

    J'avais une autre question : à quoi sert l'indexation du code xml proposée dans votre réponse ?

    Merci encore.
    Didou139

Discussions similaires

  1. Récupération XML itinéraire google
    Par jmmaugis dans le forum GWT et Vaadin
    Réponses: 0
    Dernier message: 23/02/2012, 14h55
  2. [PLSQL]Problème d'accent dans récupération XML
    Par henri93 dans le forum PL/SQL
    Réponses: 1
    Dernier message: 29/04/2010, 13h08
  3. Envoi et récupération xml via url
    Par eidole62 dans le forum SQL
    Réponses: 1
    Dernier message: 22/11/2007, 11h29
  4. Récupération XML : vous etes Java ou PHP?
    Par Anis21 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 28/02/2007, 09h32
  5. Récupération xml récalcitrante edit : need help
    Par InDaWinD dans le forum Général Python
    Réponses: 3
    Dernier message: 14/04/2006, 11h28

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