Использование XML локатор для обозначения текущей парсер POS

Часто, когда SAX-парсер встречает плохо символом в исходном XML-документ, он доклады об этой ошибке. Для потребителя это будет больше знать строки и столбцов, где произошла ошибка. SAX композиций текущую позицию чтения в исходном XML с помощью локатора. SAX-обработчик может спасти локатора для следующих подробный вывод ошибок.

Приведенный ниже код показывает, как обращаться с локатором:


import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;



import org.xml.sax.Attributes;

import org.xml.sax.Locator;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;



/**

 * This example demonstrates how to indicate current position

 * in the source XML-document.

 */



public class SampleOfXmlLocator extends DefaultHandler {

    private Locator locator;

    

    // this will be called when XML-parser starts reading

    // XML-data; here we save reference to current position in XML:

    public void setDocumentLocator(Locator locator) {

        this.locator = locator;

    }

    

    // here we accept only 'purchase-order';

    // in all the rest cases we will raise

    // an exception with detailed message:

    public void startElement(String uri, String localName,

            String qName, Attributes attrsthrows SAXException {

        

        if (qName.equals("purchase-order")) {

            // ... here process element start:

        else {

            

            // compose a text with location of error-case:

            String location = "";

            if (locator != null) {

                location = locator.getSystemId()// XML-document name;

                location += " line " + locator.getLineNumber();

                location += ", column " + locator.getColumnNumber();

                location += ": ";

            }

            

            throw new SAXException(location + "Illegal element");

        }

    }

    

    /**

     * Application entry point

     @param args command-line arguments

     */

    public static void main(String[] args) {

        try {

            // creates and returns new instance of SAX-implementation:

            SAXParserFactory factory = SAXParserFactory.newInstance();

            factory.setValidating(true);

            

            // create SAX-parser...

            SAXParser parser = factory.newSAXParser();

            // and parse:

            parser.parse("sample.xml"new SampleOfXmlLocator());

            

        catch (Exception ex) {

            ex.printStackTrace(System.out);

        }

    }

}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>