vineet, Unfortunately it's not possible to find all fatal errors in one pass. Any parser that conforms to the W3C XML specification will not continue after the first well-formedness error is found. This is because you cannot create a XML parser that can reliably find all the errors in the XML document. XML files can become wildly non-conformant after the first error is encountered.
It was decided early on in XML standarization that the standard would not be cluttered with complicated ways for parsers to guess how the document is supposed to be formed and thus try to glean what's wrong with the document as a whole. Check out this page for a simple explanation: http://www.w3schools.com/dom/dom_validate.asp Ian 28 May 2007 04:40:32 -0000, vineet rajput <[EMAIL PROTECTED]>:
Hi mukul and Michael, sorry for this communication gap i was on vacation.well thanks for your time and reply...but problem is; In our system we need to capture all th well formed errors in one go. getting one fatal error is not acceptable as per our requirement.
it will be a great help if you can let me know where i am doing wrong for
this (need urgent solution) or atleast let me know where can i find solution. The (relevant portion of the) XML document follows:(with two well formed errors)*************** <?xml version="1.0" encoding="UTF-8"?> <rootDirMapping> <rootDir>AppData</rootDir> <mappingFile>MappingFiles</mappingFile> <schemaFile>SchemaFiles<schemaFile> <validationHierarchy>1hierarchy<validationHierarchy> <database>database</database> </rootDirMapping> The (relevant portion of the) XML schema follows: <?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema "> <xs:element name="rootDirMapping"> <xs:complexType> <xs:sequence> <xs:element name="rootDir" type="xs:string" /> <xs:element name="mappingFile" type="xs:string" /> <xs:element name="schemaFile" type="xs:string" /> <xs:element name="validationHierarchy" type="xs:string" /> <xs:element name="database" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> ************************************************************* The (relevant portion of the) Java Code follows: public static boolean validateWithSchema(String XMLFile, String Schema){ boolean result = true; long startTime = System.currentTimeMillis(); // Instantiate the DOM parser. DOMParser parser = new DOMParser(); // set the features try{ parser.setFeature("http://xml.org/sax/features/namespaces ",true); parser.setFeature("http://xml.org/sax/features/validation ",true); parser.setFeature(" http://apache.org/xml/features/validation/schema",true); parser.setFeature(" http://apache.org/xml/features/validation/schema-full-checking",true); parser.setFeature(" http://apache.org/xml/features/continue-after-fatal-error", true); parser.setProperty(" http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation ",Schema); // myErrorHandler is a descendant of ErrorHandler, it should be set here to be able to catch parse errors forgivingErrorHandler hndl = new forgivingErrorHandler(); parser.setErrorHandler(hndl); } catch (SAXNotSupportedException ex){ System.out.println("SAXNotSupportedException Exception"); } catch (SAXNotRecognizedException ex){ System.out.println("SAXNotRecognizedException Exception"); } // parse the xml file, the errorhandler class has callbacks, // so those will be called automatically there is a parse error try{ parser.parse(XMLFile); //System.out.println("Parsed Successfully by DOM Parser"); } catch (org.xml.sax.SAXException ex){ System.out.println("SAXException Exception"); ex.printStackTrace(); } catch (java.io.IOException ex){ System.out.println("IOException Exception"); } return result; } The (relevant portion of the) Java Code for Error Handler follows: import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class forgivingErrorHandler implements org.xml.sax.ErrorHandler { public forgivingErrorHandler() {} public void error(org.xml.sax.SAXParseException err) throws SAXException { FileWriter fstream; try { String fs="D:\\WORKSPACE\\xmlValidation\\ExceptionLogs\\Errors.txt"; fstream = new FileWriter(fs,true); PrintWriter out = new PrintWriter(fstream); out.write("Exception at:"+err.getLineNumber()+"***"+err.getMessage()+"\n\n\n"); out.close(); } catch (IOException e) { e.printStackTrace(); } } public void fatalError(org.xml.sax.SAXParseException fe) throws SAXException { FileWriter fstream; try { String fs="D:\\WORKSPACE\\xmlValidation\\ExceptionLogs\\FatalErrors.txt"; fstream = new FileWriter(fs,true); PrintWriter out = new PrintWriter(fstream); out.write("Exception at:"+fe.getLineNumber()+"***"+fe.getMessage()+"\n\n\n"); out.close(); } catch (IOException e) { e.printStackTrace(); } } public void warning(org.xml.sax.SAXParseException war) throws SAXException { FileWriter fstream; try { fstream = new FileWriter("D:\\WORKSPACE\\xmlValidation\\ExceptionLogs\\Warnings.txt",true); PrintWriter out = new PrintWriter(fstream); out.write("Exception at:"+war.getLineNumber()+"***"+war.getMessage()+"\n\n\n"); out.close(); } catch (IOException e) { System.out.println("Here are we in the Warning section...."); e.printStackTrace(); } } } I have put xml-apis.jar, xercesImpl.jar, serializer.jar, resolver.jar at build path. Unfortunately, when I try to validate the above XML document against the Schema, it throws errors as I explained above⦠only one fatal error. Errors that I got***************************** Exception at:8***The element type "validationHierarchy" must be terminated by the matching end-tag "</validationHierarchy>". Exception at:8***The end-tag for element type "validationHierarchy" must end with a '>' delimiter. Exception at:9***XML document structures must start and end within the same entity. Exception at:-1***Premature end of file. ************************* it will be a great help if you can let me know where i am doing wrong for this (need urgent solution) or atleast let me know where can i find solution. Thanks Vineet Rajput Software Engineer Snap-On Business Solution Logix Techno Park, Noida,INDIA [image: Best of Fares]<http://adworks.rediff.com/cgi-bin/AdWorks/click.cgi/www.rediff.com/signature-home.htm/[EMAIL PROTECTED]/1190170_1184066/1189298/1?PARTNER=3&OAS_QUERY=null+target=new+>
-- Ian Lewis [EMAIL PROTECTED] http://www.ianlewis.org/ http://jsxe.sourceforge.net