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 :

Acceder aux donnees XML d'un champs


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 20
    Points
    20
    Par défaut Acceder aux donnees XML d'un champs
    Bonjour,
    Je possede actuellement des tables possedant des champs types XML. J'aimerais savoir comment acceder au donnees a l'interieur autant en lecture qu'en ecriture.
    Voici une structure identique au contenu de mes champs (la confidentialite m'empeche de divulger les vraies informations desole) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <Personne>
          <Caracteristiques type="Machin" name="ALeDroit" value="1">
          <Caracteristiques type="Bidule" name="NombreDeDoigts" value="10">
    </Personne>
    Et voici la requete que j'ai pu deduire de la documentation msdn, mais elle ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select MonChampsXML.query('
    declare default element namespace  "http://monProgramme.com/MonChampsXML/MaTable";
    //Caracteristiques/@name/text()')
    as Result
    from [dbo].[MaTable]
    Merci de m'aider si quelqu'un connait la solution

    PS : Le message d'erreur affiche est
    Msg 2377, Level 16, State 1, Line 3
    XQuery [dbo.MaTable.MonChampsXML.query()]: Result of 'text()' expression is statically 'empty'

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 133
    Points : 158
    Points
    158
    Par défaut Manipuler les champs XML d'une table SQL Server
    Bonjour Raptang,
    Ton champ XML dans ta table, c'est du texte formaté en XML, dès que tu as lu ta table, utilise les fonctions du Linq to Xml, ex. XElement.Load(s).
    Jette à coup d'oeil à ce post sur le forum :
    http://www.developpez.net/forums/d75...emier-element/.
    De même quand tu as fini, tu écris ta chaine toujours avec les fonctions Linq to Xml, et tu la transfères à ta table comme n'importe quelle autre variable.
    Voila, voilà.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    Merci pour ta reponse, je vais tenter de decouvrir comment fonctionne cette technologie.

    [edit]J'ai regarde tres rapidement le contexte d'utilisation de LINQ et j'ai la vague impression que c'est du code type .NET ou VB.

    Dans mon cas, la requete doit se placer dans le contexte d'une procedure stockee SQL de mise a jour executee automatiquement.

    Me trompe-je ?
    En tout cas je vais reprendre mon etude de la technologie au cas ou ...[/edit]

  4. #4
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Vous pouvez directement gérer et extraire du XML via SQL Server.

    Tout d'abord, êtes vous sûr que votre fragment SQL soit correcte ?
    D'après moi il manque la fermeture des balises pour au niveau des noeuds <Caracteristiques>.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Personne>
          <Caracteristiques type="Machin" name="ALeDroit" value="1" />
          <Caracteristiques type="Bidule" name="NombreDeDoigts" value="10" />
    </Personne>
    Ensuite pour extraire les valeurs d'attributs de votre fragment XML il existe plusieurs méthodes. Je vous en propose une :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DECLARE @t TABLE
    (
     texteXML XML NOT NULL
    );
     
    INSERT INTO @t VALUES('<Personne><Caracteristiques type="machin" name="ALeDroit" value="1" /><Caracteristiques type="bidule" name="NombreDeDoigts" value="10" /></Personne>');
     
    SELECT texteXML.query('data(/Personne/Caracteristiques/@name)') AS [name]
    FROM @t;
    ++

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    Il est vrai que j'avais oublie de clore les balises dans le post mais elles sont bien en place dans la base.

    Pour la requete, elle ressemble fortement a celle que j'ai postee et si je remplace le //Caracteristiques par /Personne/Caracteristiques il me dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    XQuery [dbo.maTable.Personne.query()]: There is no element named "{http://monProgramme.com/MonChampsXML/MaTable}:Caracteristiques" in the type "element({http://monProgramme.com/MonChampsXML/MaTable}:Personne,#anonymous) *".
    J'ai egalement tente de faire : //Caracteristiques/@name et cela donne l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    XQuery [dbo.maTable.Personne.query()]: Attribute may not appear outside of an element
    De meme, j'ai essaye de recuperer la valeur numerique ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select MonChampsXML.value('
    declare default element namespace  "http://monProgramme.com/MonChampsXML/MaTable";
    //Caracteristiques/@value', 'int')
    as Result
    from [dbo].[maTable]
    Et j'obtiens l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    XQuery [dbo.maTable.Personne.value()]: 'value()' requires a singleton (or empty sequence), found operand of type 'xs:string *'
    Aidez moi please, je tourne en rond !!!!

  6. #6
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Avez mis dans votre requête 'data(.....)'.

    Sans cela vous aurez toujours le message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XQuery [dbo.maTable.Personne.query()]: Attribute may NOT appear outside of an element
    ++

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    Merci bien ! Effectivement ca fonctionne beaucoup mieux !
    Je vais verifier que j'accede aux donnees que je veux avant de passer en [Resolu]. Merci encore du soutien !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FPDF] Peut on acceder aux donnees avec fpdf ?
    Par jmtrivia dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 19/03/2010, 22h45
  2. accéder aux données de la carte PCI
    Par dz_robotix dans le forum C++Builder
    Réponses: 4
    Dernier message: 18/07/2006, 17h57
  3. acceder aux champs d'une base de donnee
    Par trunks-tr dans le forum JDBC
    Réponses: 13
    Dernier message: 07/06/2006, 22h09
  4. [C#] Acceder aux données du DataGrid
    Par bolo dans le forum ASP.NET
    Réponses: 17
    Dernier message: 15/07/2004, 16h29
  5. [VBA-E] accéder aux données de cellules fusionnées
    Par hirochirak dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/05/2004, 08h54

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