externes XML-Schema mit JDOM validieren

Vielen Dank für die Tipps.

Ich habe diesen Beitrag überhaupt nicht mehr im Fokus gehabt. (Aus diesem Grund habe ich auch keine Antworten zu den Fragen aus dem letzten Jahr abgegeben.) Allerdings ist das Thema XML und Java immer noch ein großes Thema bei mir.
Witzig ist der Buchvorschlag, da ich das nur bestätigen kann. Ich habe mir dieses Buch im vergangenen Jahr gekauft und damit dann auch die JDOM-Fragestellungen lösen können.
Der Online-Tipp ist trotzdem gut, da ich immer kein Bock habe, alle möglichen Bücher überall verfügbar zu haben.

Ich habe trotzdem für mich noch ein offenes Thema. In JDOM gibt es eine print-Methode, mit der man sehr schön eingelesenen XML-Strukturen formatiert ausgeben kann. Gibt es da auch bei sehr großen Dateien eine Möglichkeit?

Da kommt dann JDOM nicht mehr in Frage, da es den Speicher zerreißt. Ich validiere mit dem SAX-Parser gegen XML-Schema. Leider werden die Dateien bei der Ausgabe nicht formatiert. Ist nicht besonders wichtig, sieht nur schöner aus und ist natürlich lesbarer.

Tschau
Lutz
 
Hi Lutz,

sorry wegen der langen Antwortzeit, war in meine Arbeit vertieft. Bis jetzt war ich davon ausgegangen, daß die pretty-Format-Sache ok sei. Gut zu wissen. Gestern bin ich auf einen Link gestoßen, in dem Stundenten für ein Projekt ein XML-Tree-Viewer mit syntax-highlighting implementiert haben. Dort wird die JTree-Klasse und JTextPane erweitert. Allerdings weiß ich nicht genau, ob Du das verwenden kannst.

Hier ist der Link:
http://www.java-forum.org/de/viewtopic.php?t=7997

eigentlich sieht das ganz nett aus.

Viele Grüße

Jan
 
Bei mir besteht dieses Problem leider immer noch.

Ich habe ein xml-File und ein xsd-File. Wenn ich dies über SAX validiere, ist es fehlerfrei. JDOM bringt mir folgenden Fehler:

Error on line 3 of document file:/U:/xml-ewo/08435016_09162000_0038_20071108134334_000007.xml: cvc-elt.1: Cannot find the declaration of element 'xmeld:fortschreibung.adresse.0038'.

xmeld:fortschreibung.adresse.0038 ist aber in der xsd-Datei vorhanden.

Vielleicht liegt der Fehler auch in meinem Code, deswegen hier der Code:
SAX:
PHP:
		public static void main(String[] args) throws SAXException  {


		System.out.println("vaildate " + args[0]);
		SchemaFactory factory = SchemaFactory
			.newInstance("http://www.w3.org/2001/XMLSchema");
		String xsd = "U:/xml-ewo/xmeld-nachrichten.xsd";
		File schemaLocation = new File(xsd);
		Schema schema = factory.newSchema(schemaLocation);
		Validator validator = schema.newValidator();
		Source source = new StreamSource(args[0]);

		try {
			validator.validate(source);
			System.out.println("valid");
		} catch (SAXParseException spe) {
			System.out.println("not valid");
			System.out.println(spe.getMessage());
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

JDOM:
PHP:
	public static void main(String[] args) {
		try {
			File xml = new File(args[0]);
			File xsd = new File(args[1]);
			SAXBuilder builder = new SAXBuilder(
					"org.apache.xerces.parsers.SAXParser", true);
			builder.setFeature(
					"http://apache.org/xml/features/validation/schema", true);
			builder.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation", 
					xsd);
			Document doc = builder.build(xml);
			System.out.println("valid");
		} catch (Exception e) {
			System.out.println("not valid");
			System.err.println(e.toString());
		}
	}

Weiß vielleicht einer Rat?
 
Hi Thomas,

versuche es doch mal mit folgenden Zeilen:

SAXBuilder saxBuilder =
new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);

saxBuilder.setFeature("http://apache.org/xml/features/validation/schema", true);

saxBuilder.setFeature("http://xml.org/sax/features/external-general-entities", true);

Die SchemaLocation muss in der Xml-Datei aufgeführt sein. Wie ich aus deinem Beispiel sehe, handelt es sich um eine lokale Ressource. Das ist grundsätzlich egal, allerdings hatte ich zuerst meine Problem mit der Validierung via Proxy.

Schaue sonst auch noch unter http://xerces.apache.org/xerces-j/features.html

Die Zeile mit dem setProperty bitte weglassen. Musste ich auch nicht.

In welchem Zusammenhang programmierst Du mit Xmeld?

Tschau Lutz
 
Zurück