Saturday, February 8, 2014

How to parse the xml and validate the xml against schema ?

1)javalearnersWithErrors.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->

<javalearners >

    <learner age="30"><fname>        Anilkumar         </fname><lname>Chintha</lname></learner>
    <learner age="1">
       <fname>Rishitha</fname>
       <lname>Chintha</lname>
     </learner>
    <learner age="34">
       <fname>Sunil</fname>
       <lname>Chintha</lname>
    </learner>
   

</javalearners>


2)MyErrorHandler.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package xmlproject;

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

/**
 *
 * @author Rishitha
 */
public class MyErrorHandler implements ErrorHandler{

    @Override
    public void warning(SAXParseException exception) throws SAXException {
        System.out.println("Warning "+exception.getMessage()); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void error(SAXParseException exception) throws SAXException {
        System.out.println("Error Anil"+exception.getMessage() );//To change body of generated methods, choose Tools | Templates.
        throw exception;
    }

    @Override
    public void fatalError(SAXParseException exception) throws SAXException {
        System.out.println("fatalError "+exception.getMessage());
        throw exception;
        //To change body of generated methods, choose Tools | Templates.
    }
   
}

3)XmlProjectWithValidator.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package xmlproject;

import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
 *
 * @author Rishitha
 */
public class XmlprojectWithValidator {

    public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
        // TODO code application logic here

        DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
        fac.setIgnoringElementContentWhitespace(false);
        fac.setIgnoringComments(true);

        SchemaFactory schemaFactory
                = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");

        fac.setSchema(schemaFactory.newSchema(
                new Source[]{new StreamSource("jlxsd.xsd")}));

        DocumentBuilder bu = fac.newDocumentBuilder();
        bu.setErrorHandler(new MyErrorHandler());

        Document doc = bu.parse(new File("javalearnersWithErrors.xml"));

        Element rootNode = doc.getDocumentElement();

        NodeList list = rootNode.getElementsByTagName("learner");
        for (int i = 0; i < list.getLength(); i++) {

            Element learner = (Element) list.item(i);
            NodeList learnerEleFirstList = learner.getElementsByTagName("fname");
            Node fnameNode = learnerEleFirstList.item(0);
            System.out.println(fnameNode.getFirstChild().getNodeValue());
            NodeList learnerEleLastList = learner.getElementsByTagName("lname");
            Node lnameNode = learnerEleLastList.item(0);
            System.out.println(lnameNode.getFirstChild().getNodeValue());

        }

    }
}

4)jlxsd.xsd

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="javalearners">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="learner" maxOccurs="unbounded" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="fname"/>
              <xs:element type="xs:string" name="lname"/>
            </xs:sequence>
            <xs:attribute type="xs:byte" name="age" use="optional"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

If you want to see errors... remove some element or make a mistake in xml.

Organize the above files as given in below screen shot.
Also add xml and xsd in the root of xmlproject.




No comments:

Post a Comment