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 :

Lecture d'un fichier XML par PL/SQL sous oracle10g


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut Lecture d'un fichier XML par PL/SQL sous oracle10g
    Bonjour,

    Je viens de créer trois procédures pour la lecture d'un fichier XML par PL/SQL
    sous oracle 10g.
    ======== la procedure N° 1 ==================
    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
    create or replace procedure afficherElement(doc xmlDom.DOMDocument) is
    lesNoeuds xmlDom.DOMNodeList;
    longueur number;
    noeud xmlDom.DOMNode;
    begin
    ---- obtenir tous les elements du document
    lesNoeuds := xmlDom.getElementsByTagName(doc,'*');
    longueur := xmlDom.getLength(lesNoeuds);
     
    ---- parcourir tous les elements à l'aide d'une boucle
    for i in 0 .. longueur - 1
    loop
    noeud := xmlDom.item(lesNoeuds,i);
    dbms_output.put(xmlDom.getNodeName(noeud) ||' ');
    end loop;
    ---- passer à la ligne suivante
    dbms_output.put_line (' ');
    end;
    =============== la procedure N° 2 ================
    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
    create or replace procedure afficherAttributs(doc xmlDom.DOMDocument) is
    lesNoeuds Xmldom.DOMNodeList;
    lg1 number;
    lg2 number;
    noeud xmlDom.DOMNode;
    element Xmldom.DOMElement;
    lesAttributs xmldom.DOMNamedNodeMap;
    nomAttr varchar2(100);
    valeurAttr varchar2(100);
    begin
    --- obtenir tous les elements
    lesNoeuds := xmlDom.getElementsByTagName(doc,'*');
    lg1 := xmlDom.getLength(lesNoeuds);
    --- parcourir tous les elements
    for i in 0 .. lg1 - 1 
    loop
    noeud := xmldom.item(lesNoeuds , i);
    element := xmldom.makeElement(noeud);
    --- nom de la balise
    dbms_output.put_line(xmldom.getTagName(element) || ':');
    --- obtenir tous les attributs de cet element
    lesAttributs := xmldom.getAttributes(noeud);
    if (xmldom.isNull(lesAttributs)= FALSE)
    then
    lg2 := xmldom.getLength(lesAttributs);
    --- parcourir tous les attributs
    for j in 0 .. lg2 - 1 
    loop
    noeud := xmldom.item(lesAttributs , j);
    nomAttr := xmldom.getNodeName(noeud);
    valeurAttr := xmldom.getNodeValue(noeud);
    dbms_output.put(' '|| nomAttr || '='||valeurAttr);
    end loop;
    dbms_output.put_line (' ');
    end if;
    end loop;
    end;
    =============== la procedure N° 3 ==============
    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
    create or replace procedure lirexml(
    repertoire in varchar2,
    fichier in varchar2,
    fichier_erreur in varchar2 )
    is
    p xmlparser.Parser;
    doc xmldom.DOMDocument;
    begin
    -- nouveau parser
    p := xmlparser.newParser;
    --- fixer quelques caracteristiques du parser
    XMLDOM.SetVersion(doc,'1.0');
    XMLDOM.SetCharSet(doc,'UTF-8');
    xmlparser.setValidationMode(p,FALSE);
    xmlparser.setErrorLog(p,repertoire||'\'||fichier_erreur);
    xmlparser.setBaseDir(p,repertoire);
    --- analyser le fichier XML
    xmlparser.parse(p,repertoire||'\'||fichier);
    --- obtenir le document
    doc := xmlparser.getDocument(p);
    --- afficher les differents elements
    dbms_output.put_line('les elements du documents sont : ');
    afficherelement(doc);
    --- afficher les attributs de chaque element
    dbms_output.put_line('les attributs des elements sont : ');
    afficherattributs(doc);
    --- liberer le document
    xmldom.freeDocument(doc);
    --- liberer le parser
    xmlparser.freeParser(p);
    end;
    ========= pour la complitation pas des problemes =====
    au moment de l’exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute lireXml('C:\mecasoft\oracle_xml','equipe.xml','erreur.txt');
    Le message suivant s'affiche :
    ERROR at line 1:
    ORA-31020: The operation is not allowed, Reason: Not supported
    ORA-06512: at "XDB.DBMS_XMLPARSER", line 395
    ORA-06512: at "SALEM.LIREXML", line 15
    ORA-06512: at line 1
    ============= mon fichier equipe.xml ======
    <?xml version="1.0" standalone="no" encoding="UTF-8"?>
    <!DOCTYPE equipe SYSTEM "equipe.dtd">
    <equipe nom="US POSTAL" pays ="USA">
        <coureur numero="001"> SALEM </coureur>
        <coureur numero="002"> NEJIB </coureur>
        <coureur numero="003"> HAMZA </coureur>
        <coureur numero="004"> KHALED </coureur>
        <coureur numero="005"> BECHIR </coureur>
        <coureur numero="006"> ALI </coureur>
       <coureur numero="007"> MOHAMED </coureur>
       <coureur numero="008"> FAOUZI </coureur>
    </equiipe>

  2. #2
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Bonjour,

    Il y a une erreur dans le flux XML : la balise fermant de "equipe" contient une faute de frappe (il y a 2 "i"). Je ne suis pas certain que ça soit l'origine du message d'erreur, mais ça ne peut pas fonctionner.

    Une autre cause possible de l'erreur peut être l'encoding du flux.

  3. #3
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Citation Envoyé par nejib salem
    je viens de corriger mon fichier xml mais le probleme persiste
    merci de ta collaboration
    Est-ce qu'il y a bien un DIRECTORY de créé pointant sur le répertoire 'C:\mecasoft' ?
    Est-ce que la base de données a bien les droits de l'ecture / écriture sur ce répertoire ?
    Est-ce que le fichier d'erreur est généré, et si oui que contient-il ?

Discussions similaires

  1. lecture de fichier XML par mfiles
    Par okoni06 dans le forum GED
    Réponses: 2
    Dernier message: 29/12/2015, 16h31
  2. lecture d un fichier xml par xsl
    Par reudodviking dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 22/10/2007, 23h19
  3. Lecture d'un fichier mot par mot
    Par hamster dans le forum C++
    Réponses: 7
    Dernier message: 21/02/2005, 17h25
  4. Réponses: 6
    Dernier message: 02/09/2003, 15h12

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