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

Oracle Discussion :

utilisation de XMLType


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2006
    Messages : 41
    Par défaut utilisation de XMLType
    Bonjour,

    j'utilise XMLType pour traiter les données d'un fichier XML dans un package PL/SQL. Cependant je ne parviens pas à faire ce que je veux.
    En gros, j'ai un fichier XML de ce type :

    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
    <HEADER>
      <A>
        <B>
          <NIVEAU>RACINE</NIVEAU>
          <NO_NIVEAU>001</NO_NIVEAU>
          <NIVEAU_PARENT></NIVEAU_PARENT>
          <NO_NIVEAU_PARENT></NO_NIVEAU_PARENT>
        </B>
        <B>
          <NIVEAU>RACINE</NIVEAU>
          <NO_NIVEAU>002</NO_NIVEAU>
          <NIVEAU_PARENT></NIVEAU_PARENT>
          <NO_NIVEAU_PARENT></NO_NIVEAU_PARENT>
        </B>
        <B>
          <NIVEAU>BRANCHE</NIVEAU>
          <NO_NIVEAU>011</NO_NIVEAU>
          <NIVEAU_PARENT>RACINE</NIVEAU_PARENT>
          <NO_NIVEAU_PARENT>001</NO_NIVEAU_PARENT>
        </B>
        <B>
          <NIVEAU>BRANCHE</NIVEAU>
          <NO_NIVEAU>021</NO_NIVEAU>
          <NIVEAU_PARENT>RACINE</NIVEAU_PARENT>
          <NO_NIVEAU_PARENT>001</NO_NIVEAU_PARENT>
        </B>
        <B>
          <NIVEAU>FEUILLE</NIVEAU>
          <NO_NIVEAU>111</NO_NIVEAU>
          <NIVEAU_PARENT>BRANCHE</NIVEAU_PARENT>
          <NO_NIVEAU_PARENT>011</NO_NIVEAU_PARENT>
        </B>
        <B>
          <NIVEAU>FEUILLE</NIVEAU>
          <NO_NIVEAU>211</NO_NIVEAU>
          <NIVEAU_PARENT>BRANCHE</NIVEAU_PARENT>
          <NO_NIVEAU_PARENT>021</NO_NIVEAU_PARENT>
        </B>
      </A>
    </HEADER>
    J'insère donc mes données dans une table pour pouvoir les traiter ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO parse_xml (filename, xml_document)
             VALUES ('monFichier.xml',
                     XMLTYPE(BFILENAME(P_REP_FIC, 'monFichier.xml'), NLS_CHARSET_ID('AL32UTF8')));
    Puis je voudrais récupérer le NO_NIVEAU des FEUILLE appartenant à la BRANCHE 011 qui appartient elle-même à la RACINE 001.

    Pour cela j'ai fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT EXTRACT(XML_DOCUMENT, '/HEADER/A/B/NIVEAU').GETSTRINGVAL() AS NIVEAU,
           EXTRACT(XML_DOCUMENT, '/HEADER/A/B/NO_NIVEAU').GETSTRINGVAL() AS NO_NIVEAU
    FROM PARSE_XML
    WHERE FILENAME = 'monFichier.xml'
    AND EXISTSNODE(XML_DOCUMENT,'/HEADER/A/B[NO_NIVEAU="001"]') = 1
    AND EXISTSNODE(XML_DOCUMENT,'/HEADER/A/B[NIVEAU="RACINE"]') = 1;
    Afin de déjà récupérer la RACINE est son niveau si elle existe et prévois de réitérer l'opération sur les différents niveaux mais la requête me retourne tous les niveaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    NIVEAU : <NIVEAU>RACINE</NIVEAU><NIVEAU>RACINE</NIVEAU><NIVEAU>BRANCHE</NIVEAU><NIVEAU>BRANCHE</NIVEAU><NIVEAU>FEUILLE</NIVEAU><NIVEAU>FEUILLE</NIVEAU>
     
    NO_NIVEAU :
    <NO_NIVEAU>001</NO_NIVEAU><NO_NIVEAU>002</NO_NIVEAU><NO_NIVEAU>011</NO_NIVEAU><NO_NIVEAU>021</NO_NIVEAU><NO_NIVEAU>111</NO_NIVEAU><NO_NIVEAU>211</NO_NIVEAU>
    Comment faire pour avoir ce que je veux?

    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2006
    Messages : 41
    Par défaut
    J'y suis parvenu à force de tentative et de recherche sur Google :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT EXTRACTVALUE(P.COLUMN_VALUE,'/B/NIVEAU') RACINE,
           EXTRACTVALUE(P.COLUMN_VALUE,'/B/NO_NIVEAU') no_racine
       FROM PARSE_XML W, 
       TABLE(XMLSEQUENCE(EXTRACT(XML_DOCUMENT, '/HEADER/A/*'))) P
    WHERE W.FILENAME = 'monFichier.xml'
    AND EXISTSNODE(VALUE(P),'/B[NO_NIVEAU="001"]') = 1
    AND EXISTSNODE(VALUE(P),'/B[NIVEAU="RACINE"]') = 1;

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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