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

PL/SQL Oracle Discussion :

XPATH d'un fichier XML avec Oracle


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Par défaut XPATH d'un fichier XML avec Oracle
    Bonjour,
    je voudrai lister les valeurs des attributs d'un fichiers XML
    <root>
    <s id="s1">
    <z code="A01" libelle="ESPACE A01">
    <p debut="10/03/2014 00:15" fin="10/03/2014 00:15" in="0" out="0" flag="1" traite="0"/>
    ....
    J'ai fais le code suivant pour aficher le id de la balise s, le code des balises z, et le debut

    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
    FOR r1 IN (SELECT EXTRACTVALUE (VALUE (p), 's/@id') AS ID
                    FROM TABLE (XMLSEQUENCE (EXTRACT (x, '/root/s'))) p)
       LOOP
          DBMS_OUTPUT.put_line ('id_structure = ' || r1.ID);
     
          FOR r IN (SELECT EXTRACTVALUE (VALUE (p), 'z/@code') AS cod
                      FROM TABLE (XMLSEQUENCE (EXTRACT (x,
                                                           '/root/s[@id="'
                                                        || r1.ID
                                                        || '"]/z'
                                                       )
                                              )
                                 ) p)
          LOOP
             DBMS_OUTPUT.put_line ('code zone = ' || r.cod);
     
             FOR r2 IN
                (SELECT EXTRACTVALUE (VALUE (p), 'p/@debut') AS debut
                   FROM TABLE (XMLSEQUENCE (EXTRACT (x,
                                                        '/root/s/z[@code="'
                                                     || r.cod
                                                     || '"]/p'
                                                    )
                                           )
                              ) p)
             LOOP
                DBMS_OUTPUT.put_line ('debut = ' || r2.debut);
             END LOOP;
          END LOOP;
       END LOOP;
    est ce qu'il y a une optimisation à faire?

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Essayez de poster un exemple complet de fichier XML.
    Pour extraire des valeurs d'un fichier XML vous n'avez pas besoin de PL/SQL.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Par défaut
    Je sais TB.
    je veux le faire en PL SQL.

    la structure es mise dans mon 1er commentaire.

    <root>
    <s id="s1">
    <z code="A01" libelle="ESPACE A01">
    <p debut="10/03/2014 00:15" fin="10/03/2014 00:15" in="0" out="0" flag="1" traite="0"/>
    <p debut="10/03/2014 00:15" fin="10/03/2014 00:15" in="0" out="0" flag="1" traite="0"/>
    <p debut="10/03/2014 00:15" fin="10/03/2014 00:15" in="0" out="0" flag="1" traite="0"/>
    </z>
    </s>
    </root>

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Pour PL/SQL "vous savez TB" ajoutez Begin, End, Into ...
    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
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> With Data As (
      2    Select xmltype('<root>
      3     <s id="s1">
      4     <z code="A01" libelle="ESPACE A01">
      5     <p debut="10/03/2014 00:15" fin="10/03/2014 00:15" in="0" out="0" flag="1" traite="0"/>
      6     <p debut="11/03/2014 00:15" fin="11/03/2014 00:15" in="0" out="0" flag="1" traite="0"/>
      7     <p debut="12/03/2014 00:15" fin="12/03/2014 00:15" in="0" out="0" flag="1" traite="0"/>
      8     </z>
      9     </s>
     10     </root>') x_el from dual
     11  )
     12  Select a.S_Id, a.Z_Code, b.p_debut
     13    From data t,
     14         XmlTable ('/root'
     15                  passing t.x_el
     16                  COLUMNS S_Id       Varchar2(10) Path 's/@id',
     17                          Z_Code     Varchar2(10) Path 's/z/@code',
     18                          p_xel      XmlType      Path 's/z/p'
     19         ) a,
     20         XmlTable ('/p'
     21                   Passing a.p_xel
     22                   COLUMNS p_debut Varchar2(10) Path '@debut'
     23         ) b
     24  /
     
    S_ID       Z_CODE     P_DEBUT
    ---------- ---------- ----------
    s1         A01        10/03/2014
    s1         A01        11/03/2014
    s1         A01        12/03/2014
     
    SQL>

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Par défaut
    et si on a plusieurs z dans le même s et plusieurs s dans le root

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Avez vous un exemple ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/01/2011, 19h45
  2. Lecture d'un fichier XML avec Xpath
    Par jmjmjm dans le forum C#
    Réponses: 4
    Dernier message: 27/10/2009, 14h16
  3. Problème pour lire un fichier Xml avec Xpath
    Par adrix26 dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/11/2008, 17h06

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