• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[SOLVED] DOM parser in java mit Xerces

hallo!

ich hab ein problem mit den bibliotheken von xerces die ich im java importieren muss. ich muss für die uni ein xml-file mit schema und jeweils einen parser in DOM und SAX machen. das xml-file hab ich bereits und es auch schon mit dem schema validiert.

jetzt hab ich ein grundprogramm für den DOM parser geschrieben und bekomme immer Exceptions. das programm schaut bis jetzt so aus:
Code:
/*Xerces-Parser*/
import org.apache.xerces.*;
/*DOM- und SAX-Interfaces*/
import org.w3c.dom.*;
import org.xml.sax.*;
/*Java-imports*/
import java.io.*;
import java.util.*;

public class Dom {
	/*XML-Dokumente werden über die Kommandozeile übergeben*/
	public static void main(String args[]) {
		Dom dom = new Dom();
		try {
			dom.proof(args[0], args[1]);
		} catch (Exception e) {
			System.err.println(e);
		}
	}

	/*Parameter ist das XML-Dokument und das Schema*/
	public void proof(String strXMLDoc, String strXSD) throws IOException, SAXException {
		/*DOM-Parser erzeugen*/
		DOMParser dp = new DOMParser();

		/*strXMLDoc parsen*/
		dp.parser(strXMLDoc);
		Document doc = dp.getDocument();

		/*Validierung*/
		SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
		Source schemaFile = new StreamSource(new File(strXSD));
		Schema schema = sf.newSchema(schemaFile);
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setNamespaceAware(true);
		factory.setSchema(schema);
		Validator validator = schema.newValidator();
		try {
			validator.validate(new DOMSource(doc));
		} catch (SAXException e) {
			System.err.println(e);
		}
	}
}
beim compilieren bekomme ich dann immer folgendes:
Code:
mulambo@linux-b6f5:~/Uni/Semistrukturierte Daten/Übungen/Bsp3> javac Dom.java
Dom.java:2: package org.apache.xerces does not exist
import org.apache.xerces.*;
^
Dom.java:24: cannot find symbol
symbol  : class DOMParser
location: class Dom
                DOMParser dp = new DOMParser();
                ^

soweit ich das sehe liegts daran, dass er das xercesImpl.jar nicht findet. nur hab ich jetzt schon versucht den ganzen nachmittag das zu installieren bzw. den CLASSPATH richtig zu setzen.

- ich habs probiert über YAST zu installieren. folgende pakete hab ich dabei installiert:
Code:
     Xerces-c
     Xerces-c-devel
     xerces-j2
     xerces-j2-bootstrap
     xerces-j2-demo
     xerces-j2-dom3
     xerces-j2-javadoc-apis
     xerces-j2-javadoc-dom3
     xerces-j2-javadoc-impl
     xerces-j2-javadoc-other
     xerces-j2-javadoc-xni
     xerces-j2-scripts
     xercesjarv
     xercesjarv-javadoc
ich weiß da sind ein paar unrelevante dabei, aber ich wollte gleich auf nummer sicher gehn und alles posten...

- ich hab von meinem uni-server das xerces heruntergeladen und entpackt, dann wollt ich den pfad im CLASSPATH einbinden.
- ich hab das xercesImpl.jar in den selben ordner vom java-programm kopiert

aber ich bekomm immer die gleiche meldung...

ich weiß, dass das jetzt eher ein installationsproblem ist [und vor allem dass ich zu dumm zum installiern bin, da ich mich, außer mit dem YAST, doch noch recht wenig auskenne], aber ich war mir nicht sicher wo ich das genau posten sollte. und außerdem will ich nur die java-programme für DOM und SAX zum laufen bringen [auch wenns ohne xerces-installation geht :) ].
ich würd es auch mit anderen parsern machen, wenns denn einfacher ist, aber das buch zur vorlesung beinhaltet nur das xerces. die einzige einschränkungen die ich laut angabe habe sind:
Code:
    * Erstellen Sie ein Java-Programm Dom.java, welches mittels DOM-Parser folgende Funktionalität erfüllt:
          o Einlesen des XML-Dokuments universitaet.xml und Aufbau eines DOM-Baums. Dabei soll das XML-Dokument universitaet.xml gegen das von Ihnen erstellte XML-Schema universitaet.xsd validiert werden.

    * Erstellen Sie ein Java-Programm Sax.java, welches mittels SAX-Parser die analoge Funktionalität wie das Programm Dom.java bereitstellt, d.h.:
          o Einlesen des XML-Dokuments universitaet.xml mittels SAX-Parser und Validierung gegen das von Ihnen erstellte XML-Schema universitaet.xsd

    * Der von Ihnen erstelle java-Code muss Java Version 1.5 kompatibel und auf den Rechnern im Informatiklabor kompilierbar sein. Verwenden Sie keine zusätzlichen Bibliotheken für ihre Implementierung. Erstellen Sie auch hier Output-Dateien für die Ausgaben ihrer Programme, z.B.:
PS: java hab ich nur über YAST installiert mit der SUSE-installation und noch nix daran geändert. für andere sachen hat's bis jetzt gereicht.

ich hoffe ihr denkt jetzt nicht, ich will euch da meine halbe hausübung aufbrummen, aber ich komm echt nicht weiter und ich denke, wenn sich jemand damit auskennt kann er mir sicher schnell helfen...
also danke schon mal!
 
1. DOMParser liegt in org.apache.xerces.parsers, d.h. es wird - wie du bereits festgestellt hast - nicht durch "import org.apache.xerces.*" importiert!

2. Ganze Packages zu importieren ist Mist, importiere jede Klasse einzeln, dann weißt du wenigstens mit was du arbeitest.

3. Solange deine Java Kenntnisse so umfassend wie jetzt sind tu dir nen Gefallen und nimm Eclipse - da werden dir solche Fehler gleich angestrichen und für das meiste gibts nen Quickfix.
 
ich bin mittlerweile drauf gekommen, dass entweder das buch zur vorlesung mist ist, oder das xerces , welches ich runtergeladen habe...

zB wird da ein import org.apache.xerces.framework.*; verwendet und ich hab das im packet gar nicht drinnen... :(


so zum anderen noch: ich programmier schon länger java, das import schaut nur so aus, weil ich das mal so kurz getestet habe. ich habs nur vergessen zum ändern. nur hab ich immer unter windows gearbeitet, und das ist mein erstes java-programm im SUSE. deshalb hab ich mich hier mal erkundigt, weil ich mir doch ziemlich sicher bin, dass ich beim CLASSPATH auch noch was ned ganz richtig habe...

ich werds jetzt mal mit den javax.xml.* sachen machen und nicht mit dem xerces. die sind mir sympathischer nachdem ich die grade entdeckt habe.

falls weiterhin probleme auftauchen hoff ich doch mal, dass ich die hier stellen kann [ich mein jetzt nix bzgl. java an sich...]. ich muss mich erst noch im SUSE mit dem java vertraut machen.

danke schon mal!
 
Mulambo schrieb:
...zB wird da ein import org.apache.xerces.framework.*; verwendet und ich hab das im packet gar nicht drinnen... :(
org.apache.xerces.framework gabs in Xerces 1, du verwendest Xerces 2 und dort ist das Package rausgeflogen.

Mulambo schrieb:
so zum anderen noch: ich programmier schon länger java, das import schaut nur so aus, weil ich das mal so kurz getestet habe. ich habs nur vergessen zum ändern. nur hab ich immer unter windows gearbeitet, und das ist mein erstes java-programm im SUSE. deshalb hab ich mich hier mal erkundigt, weil ich mir doch ziemlich sicher bin, dass ich beim CLASSPATH auch noch was ned ganz richtig habe...
War nicht böse gemeint, ich finde Elipse nur komfortabler, u.a. weil dir damit sowas nicht passiert.

Zum Classpath: Ich würde mir die .jars von den Seiten der einzelnen Projekte holen, da sind dann noch docs & sources dabei und du weißt genau was du hast. Die bindest du dann einzeln, je nach Bedarf, in die Projekte ein. Außerdem kannst du dir so ein Ivy oder Maven Repository aufbauen dass die nen Haufen Arbeit abnimmt wenns mal komplizierter wird oder wenn du keine Lust hast jedesmal alles per Hand einzubinden.

Die Pakete aus der Paketverwaltung sind - IMO - eher um Abhängigkeiten für, per Paketverwaltung installierte, Java Programme bereitzustellen.

Mulambo schrieb:
ich werds jetzt mal mit den javax.xml.* sachen machen und nicht mit dem xerces. die sind mir sympathischer nachdem ich die grade entdeckt habe....
Wenn ich mich recht erinnere ist das eh nur die API - die du sowieso verwenden solltest um unabhängig von der gewählten Implementation zu bleiben - und du brauchts noch besagte Implementation (z.B. Xerces).
 
och, so schlimm hab ich's nicht aufgefasst. man muss ja auch ein wenig kritik vertragen, wenn man sich schon wo ned auskennt :)

ich verwend eclipse auch gern, nur nicht bei so kleinen programmen (und das ist wirklich nur eine klasse mit 4-5 funktionen, wobei das validiern schon die halbe miete ist). außerdem bin ich vor einiger zeit drauf gekommen, dass sich das Kate da prima eignet.

das mit dem Ivy und Maven hör ich zum ersten mal. danke für den tipp, werde dem demnächst nachgehn :D

und soweit ich das gesehn hab brauch ich das Xerces gar nicht. zum parsen und validieren kann ich java.xml.parsers.*, java.xml.parsers.DocumentBuilder.* und javax.xml.transform.* verwenden. die erzeugen mir auch ein DOM Document und einen Validator.

und danke noch mal für den tipp mit den .jars. werd mir das in zukunft auch gleich so merken. ich dachte wenn ich das Yast schon habe, dann nutze ich das auch gleich. aber für das ganze muss ich mich noch mehr mit dem drum-herum vom Linux auseinandersetzen...
 
so - hab jetzt sowohl DOM- als auch SAX-Parser mit DefaultHandler fertig bekommen :)

danke trotzdem noch mal für die schnelle Hilfe hier!

PS: und mein CLASSPATH problem hat sich auch erledigt. ich hatte nur den '/ ' bei CLASSPATH="./: ..." vergessen :roll:
 
Oben