Java Schemaベースxmlの検証

2070 ワード

JavaはSchemaに基づいてxmlを検証していますが、比較的簡単なのでコメントを書いていません.添付ソースダウンロード(ソース、xsd、xmlファイルを含む).

package com.szl.xml;

import java.io.File;
import java.io.IOException;

import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;

import com.sun.org.apache.xml.internal.utils.DefaultErrorHandler;

public class XmlValidator
{
    private String xsdFilePath;

    public XmlValidator(String xsdFilePath)
    {
        this.xsdFilePath = xsdFilePath;
    }

    public String validata(String xmlFilePath, ErrorHandler errorHandler)
    {
        String msg = null;
        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        try
        {
            Schema schema = factory.newSchema(new File(xsdFilePath));
            Validator validator = schema.newValidator();
            validator.setErrorHandler(errorHandler);
            validator.validate(new StreamSource(new File(xmlFilePath)));
        }
        catch (SAXException e)
        {
            msg = e.getMessage();
            e.printStackTrace();
        }
        catch (IOException e)
        {
            msg = e.getMessage();
            e.printStackTrace();
        }
        return msg;
    }

    public static void main(String[] args)
    {
        String xmlFilePath = "file/test.xml";
        String xsdFilePath = "file/school.xsd";
        XmlValidator my = new XmlValidator(xsdFilePath);
        String msg = my.validata(xmlFilePath, new DefaultErrorHandler());
        System.out.println(msg == null);
    }
}