Search code examples
javaxmldtd

How to validate xml with dtd using java?


I have following xml file:

<?xml version = "1.0" ?>
<Employee>
    <Emp_Id>E-001</Emp_Id>
    <Emp_Name>Vinod</Emp_Name>
    <Emp_E-mail>Vinod1@yahoo.com</Emp_E-mail>
</Employee>

I have following dtd file:

<!ELEMENT Employee (Emp_Id, Emp_Name, Emp_E-mail)>
<!ELEMENT Emp_Id (#PCDATA)>
<!ELEMENT Emp_Name (#PCDATA)>
<!ELEMENT Emp_E-mail (#PCDATA)>

I want to validate this xml file with above dtd using java.

Please, help thanks..:-)


Solution

  • There are three things you should do:

    • Associate the source XML document with its DTD using a doctype declaration after the XML declaration:

      <!DOCTYPE Employee SYSTEM "employee.dtd">
      

      Note: The DOCTYPE root must match the root element in the source XML.

    • setValidating to true on the DocumentBuilderFactory

    • Provide an org.xml.sax.ErrorHandler instance to the DocumentBuilder using setErrorHandler

    Here's a complete example:

    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
    domFactory.setValidating(true);
    DocumentBuilder builder = domFactory.newDocumentBuilder();
    builder.setErrorHandler(new ErrorHandler() {
        @Override
        public void error(SAXParseException exception) throws SAXException {
            // do something more useful in each of these handlers
            exception.printStackTrace();
        }
        @Override
        public void fatalError(SAXParseException exception) throws SAXException {
            exception.printStackTrace();
        }
    
        @Override
        public void warning(SAXParseException exception) throws SAXException {
            exception.printStackTrace();
        }
    });
    Document doc = builder.parse("employee.xml");
    

    Source document:

    <?xml version="1.0"?>
    <!DOCTYPE Employee SYSTEM "employee.dtd">
    <Employee>
        <Emp_Id> E-001</Emp_Id>
        <Emp_Name> Vinod </Emp_Name>
        <Emp_E-mail> Vinod1@yahoo.com </Emp_E-mail>
    </Employee>