# XML prüfen mit XSD => Alle Fehler auflisten



## Timmah (23. Mai 2006)

Hi Leute,

ich möchte eine XML-Datei gegen eine XSD-Datei prüfen. 
Prinzipiell klappt das auch, doch möchte ich, dass ich alle Fehler, die beim parsen entstanden sind, aufgelistet bekomme.

Kann ich das mit diesem Code irgendwie erreichen?


```
private void checkXML(int i)
		{
			Document xmlDocument = null;
			addInformations(i);
			try
			{
				SAXBuilder builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
	
				builder.setFeature("http://xml.org/sax/features/validation", true);
				builder.setFeature("http://apache.org/xml/features/validation/schema", true);
	
				builder.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation", jtextfieldXSD.getText());
	
				xmlDocument = builder.build(new File(vectorXMLFilesCopies.get(i).toString()));
	
			}
			catch (JDOMParseException e)
			{
				vectorXMLErrors.addElement(vectorXMLFiles.get(i).toString() + ": " + e.getMessage());
	
			}
			catch (IOException e)
			{
	
			}
			catch (JDOMException e)
			{
				System.out.println(e.getMessage());
			}
	
		}
```

Vielen Dank für eure Hilfe.


----------



## byte (23. Mai 2006)

JDOM stoppt das Parsen, sobald ein Fehler auftrat. Wüsste nicht, dass man ihn irgendwie dazu bewegen könnte, trotzdem weiter zu parsen. Macht imho auch wenig Sinn, denn der Fehler würde ja im Worst Case diverse Folgefehler produzieren.


----------



## Timmah (23. Mai 2006)

Hm, schade.

Wie würde ich das denn dann sonst bewerkstelligen können? Irgendeine Idee?


----------



## KSG9|sebastian (23. Mai 2006)

Das Dokument parsen, bei nehm entsprechenden Fehler das "schuldige" element aus dem Dokument rauswerfen.
Blöd ist, dass du halt dadurch Elemente "verlierst". Beispiel


```
<test>
<abc>
  <d> // angenommen das hier ist falsch
     <xy>llll</xy>
     <xy>llll</xy>
  </d>
</abc>
</test>
```
Wenn du das Element <d> rauswirfst fliegen halt auch alle Childnodes mit raus, somit werden die nicht validiert.


----------



## Timmah (23. Mai 2006)

Okay,

das würde wohl gehen, doch das erzielt nicht so ganz das, was ich möchte, aber trotzdem danke dafür.

Andere Ideen, evtl. nicht mit JDOM?


----------



## Timmah (1. Jun 2006)

Um das Thema nochmal aufzufrischen

Ich brauche immernoch eine Lösung hierfür...


----------



## byte (1. Jun 2006)

Der Eclipse WTP Validierer listet alle Fehler auf. Kannst die ja mal fragen, wie sie das gemacht haben.


----------



## Gast (19. Jul 2006)

Hallo Timmah...

ich hatte das gleiche Problem wie du und habe es damit gelöst. ;-)


builder.setErrorHandler(new ErrorHandler() {

			public void warning(SAXParseException arg0) throws SAXException {
				// TODO Auto-generated method stub
				System.out.println("warning: " + arg0.getMessage());
			}

			public void error(SAXParseException arg0) throws SAXException {
				// TODO Auto-generated method stub
				System.out.println("error: " + arg0.getMessage());
			}

			public void fatalError(SAXParseException arg0) throws SAXException {
				// TODO Auto-generated method stub
				System.out.println("fatal error: " + arg0.getMessage());
			}

           });


----------

