Bonjour, 
j'ai un fichier XML stocké dans le systeme et je veux parser ce fichier XML avec PL SQL dont voila le code de la procedure :
	
	| 12
 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
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 
 | PROCEDURE    READXML
(
        path IN varchar2,
        file IN varchar2,
        errors_file IN varchar2
) IS
        parser xmlParser.parser;
        document xmlDom.DomDocument;
 
        nodes xmlDom.DomNodeList;
        node xmlDom.DomNode;
        length1 number;
        length2 number;
        element xmlDom.DomElement;
        attributes xmlDom.DomNamedNodeMap;
        attributename varchar2(100);
        attributevalue varchar2(100);
 
BEGIN
 
 -- Creer un nouveau parseur
 parser := xmlParser.NewParser;
 
 -- Règle les parametres du parseur
 xmlParser.SetValidationMode(parser, FALSE);
 xmlParser.SetErrorLog(parser, path || '/' || errors_file);
 xmlParser.SetBaseDir(parser, path);
 
 -- Parse le fichier
 xmlParser.Parse(parser, path || '/' || file);
 
 -- Recupère un document
 document := xmlParser.GetDocument(parser);
 
 --------------------
 -- affiche les noeuds trouvés
 --------------------
 dbms_output.put_line('Show Elements :');
 nodes := xmlDom.GetElementsByTagName(document, '*');
 length1 := xmlDom.GetLength(nodes);
 FOR i IN 0..length1-1 LOOP
   -- Affecte le noeud comme noeud courant
   node := xmlDom.Item(nodes, i);
   dbms_output.put(xmlDom.GetNodeName(node) || '   ');
 END LOOP;
 dbms_output.put_line(' ');
 --------------------
 
 --------------------
 -- Affiche les Attributs de chaque noeud
 --------------------
 dbms_output.put_line('');
 FOR i IN 0..length1-1 LOOP
   -- Affecte le noeud comme noeud courant
   node := xmlDom.Item(nodes, i);
   element := xmlDom.MakeElement(node);
   dbms_output.put(xmlDom.GetTagName(element) || ' :');
 
   attributes := xmlDom.GetAttributes(node);
 
   IF NOT xmlDom.isNull(attributes) THEN
      length2 :=  xmlDom.GetLength(attributes);
      FOR j IN 0..length2-1 LOOP
          -- Affecte l'attribut comme attribut courent
          node := xmlDom.Item(attributes, j);
          attributename := xmlDom.GetNodeName(node);
          attributevalue := xmlDom.GetNodeValue(node);
          dbms_output.put(' ' || attributename || '=' || attributevalue);
      END LOOP;
      dbms_output.put_line(' ');
   END IF;
 END LOOP;
 --------------------
 
 -- libère le document
 xmlDom.FreeDocument(document);
 
 -- libère le parser
 xmlParser.FreeParser(parser);
 
END; | 
 mais lors j'execute la procedure 
	
	| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | DECLARE
BEGIN
 
-- Now call the stored program
  tp.readxml('C:\TEMP','TEST.xml','histo.txt');
 
EXCEPTION
WHEN OTHERS THEN
  dbms_output.put_line(SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1, 255));
RAISE;
END; | 
 une erreur est signalé à savoir :
	
	[1]: (Error): ORA-31020: L'opération est interdite ; raison : Not supported ORA-06512: à ligne 10
 Merci de votre aide? 
Remarque  :
je pose des questions dans le forum mais je n'obtiens pas ni solutions ni remarque !! (Soit je suis pas clair dans les questions soit ....??)
						
					
Partager