XML-File aus Oracle DB lesen

ÂbraXø5

Mitglied
Hallo,

ich muss mit Dom einen XML-File bearbeiten können. Also schreiben, wie lesen.
Mit einem blanken XML-File in einem beliebigen Verzeichnis ist das auch kein Problem.

Code:
...
static Document doc;
...
public XMLTool(String xmlFile) 
	{
		DOMParser dom = new DOMParser();
		try {
			dom.setFeature("http://xml.org/sax/features/validation", true);
			dom.setFeature("http://apache.org/xml/features/validation/schema",true);
			dom.parse(xmlFile);
			doc = dom.getDocument();
		} catch (SAXException se) {
			System.out.println("Fehler beim Parsen: " + se.getMessage());
		} catch (IOException e) {
			System.out.println("E/A-Fehler: " + e.getMessage());
		}
	}
...
Und dann eben mit "doc.getDocumentElement()" auf den Inhalt zugreifen.

Nur stellt sich mir jetzt die Frage, wie ich auf einen XML-File in einer DB zugreifen kann.
Bei google konnte ich da noch nichts passendes zu finden...
Man muss ja irgend ein "String xmlFile" (s.o.) übergeben. Aber wie kome ich zu dem File?
Würde mich über eine schnelle Hilfestellung freuen.

MfG,
Abra
 
Hi,

im Prinzip Verbindung zur DB herstellen und via SQL den/die gewünschten Datensätze selektieren.

In Java müsstest du dich dann darum kümmern, die Datei aus dem ResultSet zu ziehen.
In Etwa so:

Code:
ArrayList<File> xmlFiles = new ArrayList<File>();
String sql = "SELECT * FROM meineTabelle";

result = stmt.executeQuery(sql);

while(result.next()){

     File xml =  result.getString("XML"); 
     xmlFiles.add(xml);
}

return xmlFiles;

Wobei "XML" für den Name der Spalte in der DB steht, in der die XML-Datei abgelegt ist.

Bin mir aber ehrlich gesagt nicht sicher, ob du das mit Dateien aus DBs so machen kannst...versuchs einfach mal.

MfG

EDIT:
In deinem Konstruktor übergibst du dann entweder eine ArrayList als Parameter und durchläufst eine for-Schleife in der du dann jede XML Datei behandelst. Oder du behälst den jetzigen bei.
 
Zuletzt bearbeitet:
leider geht so nicht
Problem 1: Aufgrund eines bestimmten Standarts wird nur die 1.4-er Version verwendet.
Das parametrisieren des ListArrays ist aber erst ab Version 5 möglich.
Aber momentan würde mir schonmal reichen einen XML-File bearbeiten zu können.
Deshalb habe ich "xmlFiles" zu einem einfachen String gemacht und "rs.getString(1);" draufgelegt...

Problem 2: Ist es wirklich so, dass der String wirklich ausreicht den Ort des XML-Files zu spezifizieren?
"dom.parse(xmlFile);" benötigt ja entweder eine URL oder ein XMLInputSource oder nur einen InputSource.

Problem 3: "rs.getString(1); " ergibt bei mir null -.-
//btw mein SQL-Befehl ist so ausgewählt, dass momentan nur ein einziges Feld ausgegeben wird und da steht der XML-File drinnen
 
Steht den das XML File (der Content) selbst in der DatenBank (clob)? Oder ist da nur der Speicherort im Filesystem vermerkt?

Bei ersterem mußt Du vom CLOB nen Stream zum lesen holen und damit den (J)Dom Parser füttern.

Bei zweiter Variante halt wie bisher, nur das der Filename nicht fest steht, sondern wie oben beschrieben aus der DB gelesen wird.

Wenn Du auf Java 1.4 (Jaja, Oracle ist da recht fix.. (OC4J)) bleiben mußt, dann darfst Du halt keine Generics verwenden. Das obige Beispiel geht auch ohne.

Gruß
 
ok dankeschön

Das Problem ist nur, dass mein Parser
(den ich auch nur verwenden kann und darf)
keinen InputStream nimmt, nur InputSource und eben die File-URL.

mfg
 
Wenn du die Datei als File in Java zur Verfügung hast, kannst du ganz einfach via

Code:
datei.getAbsolutePath();

den Pfad erfragen und ihm deinen Parser übergeben.

Bleibt nur die Frage, klappt es mit dem blob die Datei aus der DB zu holen?

MfG
 
Also ich habe des File, als CLOB in meienr Datenbank abgespeichert.
Code:
XMLInputSource xmlFiles = null;
InputStream xmlStream = null;

xmlStream = rs.getClob(1).getAsciiStream();
xmlFiles.setByteStream(xmlStream);

Demnach müsste ich es (s.o.) per "getAsciiStream" machen.
Die unterste Zeile wär vlt. eine Möglichkeit den InputStream in einen InputSource zu ändern.
Aber das funktioniert auch nicht so recht...
 
Zurück