How to get error's line number while validating a XML file against a XML schema

前端 未结 4 1855
清歌不尽
清歌不尽 2021-02-01 21:26

I\'m trying to validade a XML against a W3C XML Schema.

The following code does the job and reports when error occurs. But I\'m unable to get line number of the error. I

4条回答
  •  -上瘾入骨i
    2021-02-01 21:37

    I found this

    http://www.herongyang.com/XML-Schema/Xerces2-XSD-Validation-with-XMLReader.html

    that appears to provide the following details(to include line numbers)

    Error:
       Public ID: null
       System ID: file:///D:/herong/dictionary_invalid_xsd.xml
       Line number: 7
       Column number: 22
       Message: cvc-datatype-valid.1.2.1: 'yes' is not a valid 'boolean' 
       value.
    

    using this code:

    /**
     * XMLReaderValidator.java
     * Copyright (c) 2002 by Dr. Herong Yang. All rights reserved.
     */
    import java.io.IOException;
    import org.xml.sax.XMLReader;
    import org.xml.sax.helpers.DefaultHandler;
    import org.xml.sax.helpers.XMLReaderFactory;
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;
    class XMLReaderValidator {
       public static void main(String[] args) {
          String parserClass = "org.apache.xerces.parsers.SAXParser";
          String validationFeature 
             = "http://xml.org/sax/features/validation";
          String schemaFeature 
             = "http://apache.org/xml/features/validation/schema";
          try {
             String x = args[0];
             XMLReader r = XMLReaderFactory.createXMLReader(parserClass);
             r.setFeature(validationFeature,true);
             r.setFeature(schemaFeature,true);
             r.setErrorHandler(new MyErrorHandler());
             r.parse(x);
          } catch (SAXException e) {
             System.out.println(e.toString()); 
          } catch (IOException e) {
             System.out.println(e.toString()); 
          }
       }
       private static class MyErrorHandler extends DefaultHandler {
          public void warning(SAXParseException e) throws SAXException {
             System.out.println("Warning: "); 
             printInfo(e);
          }
          public void error(SAXParseException e) throws SAXException {
             System.out.println("Error: "); 
             printInfo(e);
          }
          public void fatalError(SAXParseException e) throws SAXException {
             System.out.println("Fattal error: "); 
             printInfo(e);
          }
          private void printInfo(SAXParseException e) {
             System.out.println("   Public ID: "+e.getPublicId());
             System.out.println("   System ID: "+e.getSystemId());
             System.out.println("   Line number: "+e.getLineNumber());
             System.out.println("   Column number: "+e.getColumnNumber());
             System.out.println("   Message: "+e.getMessage());
          }
       }
    }
    

提交回复
热议问题