Oracle-PLSQL: Daten aus XML-Datei in die Datenbank einlesen - wie?
Hallo, ich habe ein Programm welches eine XML-Datei exportiert. Ich benötige diese XML, da sie zur "Weiterverarbeitung" zu einer Fremdfirma geschickt wird, die den Inhalt der Tags verändert ( die Tags selbst bleiben bestehen, also "ich weiß, was mich erwartet, wenn die XML eingelesen werden soll" ). Nunja. Den Export habe ich über DBMS-XMLGEN.getXML gelöst, das "Ergebnis" speichere ich einem CLOB und schreibe das File anschließend auf den Server. Um das Ding danach auf den Client zu holen habe ich in meiner Forms Anwendung eine Schleife, die über UTF-FILE jede Zeile einzeln von der Datei auf dem Server liest und diese Zeile dann über TEXT-IO auf dem Client in eine Datei schreibt. Jetzt ist wie gesagt das Problem, das Einlesen zu bewerkstelligen. Im moment ist es so, dass ich das File zwar einlesen kann, dann hab ich es wieder in einem CLOB, aber hilft mir ja nicht sonderlich viel, ich brauche ja den Inhalt der Tags um diesen Inhalt dann in den Feldern meiner Datenbank zu speichern.. Ich bin ziemlich am Verzweifeln. Also ich denke ganz ehrlich, den Stand wie er jetzt ist (also dass die XML-Datei auf dem Server gespeichert ist ) ist ok so, ich habe halt nur wirklich garkeine Idee wie ich den Inhalt der Tags rausbekommen kann. Ich habe schon viel gegooglet, aber leider noch nichts wirklich brauchbares gefunden, vielleicht kann mir ja hier jemand wenigstens ein Schlagwort für einen Lösungsansatz nennen?!
Ich habe eine Oracle 11g R1 Datenbank im Hintergrund, OS vom Server weiß ich leider nicht, nur dass es eine Linux-Kiste ist.
2 Antworten
Für diese Frage ist http://asktom.oracle.com/ vermutlich das bessere Forum.
Ich habe zwar selber über 20 Jahre Oracle Erfahrungen, aber (noch) niemals diese Problematik.
Viel Erfolg!
Falls es jemanden interessiert:
Ich habe es nun über den Parser gelöst, also XMLPARSER, dadurch konnte ich über XMLDOM auf Tags zugreifen (siehe Beispiel) :
FUNCTION READ_XML( pi_Location IN VARCHAR2,
pi_Name IN VARCHAR2 )
RETURN BOOLEAN IS
vcFile CLOB;
vParser DBMS_XMLPARSER.Parser;
vDOMDoc DBMS_XMLDOM.DOMDocument;
vDOMNL DBMS_XMLDOM.DOMNodeList;
vDOMN DBMS_XMLDOM.DOMNode;
BEGIN
--Datei-Inhalt in CLOB einlesen
vcFILE := DBMS_XSLPROCESSOR.READ2CLOB( pi_Location, pi_Name );
-- neue Parserinstanz erstellen
vParser := DBMS_XMLPARSER.newParser;
-- CLOB mit XML-Inhalt parsen
DBMS_XMLPARSER.parseCLOB( vParser, vcFile );
-- Document-Instanz in DOMDoc erstellen
vDOMDoc := DBMS_XMLPARSER.getDocument( vParser );
-- Parser-Instanz freigeben
DBMS_XMLPARSER.freeParser( vParser );
-- NodeList mit den Elementen der XML-Datei erstellen ( eine Art Array )
vDOMNL := DBMS_XMLDOM.getElementsByTagName( vDOMDoc, '*' );
-- Elemente der NodeList durchlaufen
FOR cur_art IN 0 .. DBMS_XMLDOM.getLength( vDOMNL ) - 1
LOOP
-- auf ein einzelnes Element zugreifen
vDOMN := DBMS_XMLDOM.ITEM( vDOMNL, cur_art );
-- Hier auf die Elemente zugreifen, zum Beispiel so:
DBMS_OUTPUT.PUT( DBMS_XMLDOM.getNodeName( vDOMN ) );
-- ChildNode 'öffnen' um Wert auszulesen
DBMS_XMLDOM.getFirstChild( vDOMN );
-- Wert auslesen
DBMS_OUTPUT.PUT( ' = ' || DBMS_XMLDOM.getNodeValue( vDOMN );
END LOOP;
-- Document-Instanz freigeben
DBMS_XMLDOM.FREEDOCUMENT( vDOMDoc );
RETURN( TRUE );
EXCEPTION
WHEN OTHERS THEN
-- Im Falle eines Fehler Document- und Parserinstanz freigeben
DBMS_XMLDOM.FREEDOCUMENT( vDOMDoc );
DBMS_XMLPARSER.freeParser( vParser );
RETURN( FALSE );
END READ_XML;
Viele Grüße
Soviel ich weiß, gibt es XML-Editoren (auch kostenlose im Internet), mit denen man den Inhalt einer XML-Datei sowohl einsehen als auch editieren kann. Ich selbst erstelle eine XML-Datei für eine SEPA-Lastschrift (Bankeinzug) und kann daraus auch eine Liste erzeugen. Ich mache das alles mit eigener Programmierung, damit ist ja alles lösbar.
Auch MicroSoft hat einen XML-Editor. Dieser ist aber selbst für Testzwecke kaum verwendbar.
Zu Deiner Oracle-Datenbank. Es ist schon lange her, dass ich mal damit gearbeitet habe. Oracle hat auf Kompatiblität gesetzt und wollte auf jeder Plattform präsent sein. Das wurde so gelöst, dass Oracle nicht die Datenbank als Software geliefert hat, sondern einen komplett eingerichteten UNIX-Server. Das vom Anwender verwendete Betriebssystem spielte damit keine Rolle. Ich vermute mal, dass Oracle das heute immer noch so macht.