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 :

SELECT dans un XML qui renvoie NULL


Sujet :

Développement SQL Server

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2020
    Messages : 30
    Par défaut SELECT dans un XML qui renvoie NULL
    Bonjour à tous,
    J'ai un champ au format XML avec la donnée suivante:
    Code XML : 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
    <SectionAnnotations xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <SectionNumber>0</SectionNumber>
      <Pages>
        <PageAnnotations>
          <PageNumber>0</PageNumber>
          <Annotations>
            <Layer xmlns="http://dev.test.com/schema/public/services/platform" Id="1">
              <TextStamp Color="#008000" Transparent="true" Id="a3fe1750-fcce-4243-92d3-c7ad74557768" UserName="admin">
                <Created User="admin" Time="2021-12-09T10:45:47Z" />
                <Value>CONTRÔLEE</Value>
              </TextStamp>
              <TextStamp Color="#008000" Transparent="true" Id="b280e61c-d3b6-4525-8e39-038a47d8dcfe" UserName="admin">
                <Created User="admin" Time="2021-12-09T10:47:56Z" />
                <Value>A RENVOYER</Value>
              </TextStamp>
            </Layer>
          </Annotations>
        </PageAnnotations>
      </Pages>
    </SectionAnnotations>

    Avec la requête suivante (sous SQL Server), j'arrive à obtenir les valeurs de SectionNumber et PageNumber mais je n'arrive pas à extraire la valeur UserName
    Cela me renvoie toujours une valeur null...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select 
    xml.value('(/SectionAnnotations/Pages/PageAnnotations/PageNumber)[1]', 'varchar(max)') as pagenumber,
    xml.value('(/SectionAnnotations/SectionNumber)[1]', 'varchar(max)') as sectionnumber,
    xml.value('(/SectionAnnotations/Pages/PageAnnotations/Annotations/Layer/TextStamp/@UserName)[1]', 'varchar(max)') as 'User'
    from matable
    Une idée?

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Un slash en trop entre TextStamp et @UserName

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2020
    Messages : 30
    Par défaut
    Je viens d'essayer mais ça ne lui plait pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select 
    xml.value('(/SectionAnnotations/Pages/PageAnnotations/PageNumber)[1]', 'varchar(max)') as pagenumber,
    xml.value('(/SectionAnnotations/SectionNumber)[1]', 'varchar(max)') as sectionnumber,
    xml.value('(/SectionAnnotations/Pages/PageAnnotations/Annotations/Layer/TextStamp@UserName)[1]', 'varchar(max)') as 'User'
    from matable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XQuery [mabdd.dbo.matable.XML.value()]: ")" attendu.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    En tous cas votre syntaxe fonctionne avec xpath:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xpath /tmp/sections.xml "(/SectionAnnotations/Pages/PageAnnotations/Annotations/Layer/TextStamp/@UserName)[1]"
    Found 1 nodes:
    -- NODE --
     UserName="admin"

  5. #5
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xml.value('(/SectionAnnotations/Pages/PageAnnotations/Annotations/Layer/TextStamp/@UserName)[1]', 'varchar(max)') as 'User'
    Essayez comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xml.value('(/SectionAnnotations/Pages/PageAnnotations/Annotations/*:Layer/*:TextStamp/@UserName)[1]', 'varchar(max)') as 'User'

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par tsuji Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xml.value('(/SectionAnnotations/Pages/PageAnnotations/Annotations/*:Layer/*:TextStamp/@UserName)[1]', 'varchar(max)') as 'User'
    ++
    Oui c'est bien le nested name space du niveau Layer qui pose problème.

    Ceci pourrait aussi fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    WITH XMLNAMESPACES 
    (  
       'http://dev.test.com/schema/public/services/platform' AS ly,  
    )  
    select 
    xml.value('(/SectionAnnotations/Pages/PageAnnotations/PageNumber)[1]', 'varchar(max)') as pagenumber,
    xml.value('(/SectionAnnotations/SectionNumber)[1]', 'varchar(max)') as sectionnumber,
    xml.value('(/SectionAnnotations/Pages/PageAnnotations/Annotations/ly:Layer/ly:TextStamp/@UserName)[1]', 'varchar(max)') as 'User'
    from matable
    ;

  7. #7
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2020
    Messages : 30
    Par défaut
    Merci Tsuji ça fonctionne parfaitement

    @JeitEmgie: j'ai essayé aussi en ajoutant WITH XMLNAMESPACES mais ça me ramène une valeur null également

  8. #8
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Ou par exemple simplement comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xml.value('declare namespace ly="http://dev.test.com/schema/public/services/platform";
        (/SectionAnnotations/Pages/PageAnnotations/Annotations/ly:Layer/ly:TextStamp/@UserName)[1]', 'varchar(max)') as 'User'

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/11/2008, 12h17
  2. COUNT qui renvoie null au lieu de 0
    Par gomodo dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/02/2008, 15h50
  3. Requête qui renvoie 'Null'
    Par Invit-é dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 11/06/2007, 18h32
  4. [SPL] Rewind() qui renvoie NULL
    Par fadeninev dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 06/06/2006, 16h44
  5. [JDBC]Un new qui renvoie null...
    Par Ditch dans le forum JDBC
    Réponses: 4
    Dernier message: 03/01/2005, 14h14

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