Parsing xml files using SAX

SAX parsing using JAXP (XMLReaderFactory, XMLReader, SAXParserFactory, and SAXParser)

1. We do this through XMLReaderFactory, XMLReader, as follows

1.adopt XMLReaderFactory Establish XMLReader object  
XMLReader reader = XMLReaderFactory.createXMLReader();  
2. Set Event Processor Object  
reader.setContentHandler(new MyDefaultHandler());  
3.Read to parse xml file  
FileReader fileReader =new FileReader(new File("src\\sax\\startelement\\web.xml"));  
4.Specify parsed xml file  
reader.parse(new InputSource(fileReader)); 

Case: A more in-depth understanding of uri, localName, qName, and attribute s parameters through a case

1. First create the web.xml file to parse, as follows

<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5"   
    xmlns:csdn="http://java.sun.com/xml/ns/javaee"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  <csdn:display-name></csdn:display-name>     
</web-app>  
<!--   
uri - Namespace URI,If the element does not have any namespace URI,Or no namespace processing is being performed, which is an empty string.  
xml namespace-xmlns  
localName - Local name (without prefix) or empty string if namespace processing is not being performed.  
qName - A qualified name (with a prefix) or an empty string if the qualified name is not available.  
attributes - Attributes attached to elements.If there is no property, it will be empty Attributes Object.   
 --> 

2. Create internal class code for parsing test classes and event handling as follows


    package sax.startelement;  
      
    import java.io.File;  
    import java.io.FileReader;  
      
    import org.junit.Test;  
    import org.xml.sax.Attributes;  
    import org.xml.sax.InputSource;  
    import org.xml.sax.SAXException;  
    import org.xml.sax.XMLReader;  
    import org.xml.sax.helpers.DefaultHandler;  
    import org.xml.sax.helpers.XMLReaderFactory;  
      
    public class Demo3 {  
      
        @Test  
        public void test() throws Exception {  
            // Creating an XMLReader object from an XMLReaderFactory  
            XMLReader reader = XMLReaderFactory.createXMLReader();  
            // Set Event Processor Object  
            reader.setContentHandler(new MyDefaultHandler());  
            // Read the xml file to parse  
            FileReader fileReader = new FileReader(new File(  
                    "src\\sax\\startelement\\web.xml"));  
            // Specify parsed xml file  
            reader.parse(new InputSource(fileReader));  
        }  
      
        // Custom parsing class that uses startElement to understand uri,localName,qName,Attributes  
        class MyDefaultHandler extends DefaultHandler {  
      
            @Override  
            public void startElement(String uri, String localName, String qName,  
                    Attributes attributes) throws SAXException {  
                super.startElement(uri, localName, qName, attributes);  
                System.out  
                        .println("--------------startElement Start execution--------------------------");  
                System.out.println("uri:::" + uri);  
                System.out.println("localName:::" + localName);  
                System.out.println("qName:::" + qName);  
                for (int i = 0; i < attributes.getLength(); i++) {  
                    String value = attributes.getValue(i);// Get the value value of the property  
                    System.out.println(attributes.getQName(i) + "-----" + value);  
                }  
                System.out  
                        .println("------------------startElement completion of enforcement---------------------------");  
            }  
      
        }  
    }  

3. The results of the program are as follows:

2. We did this through SAXParserFactory, SAXParser, XMLReader, as follows

1. Create a SAX parsing factory using SAXParserFactory
SAXParserFactory spf = SAXParserFactory.newInstance();
2. Obtain parser objects from SAX parsing factories
SAXParser sp = spf.newSAXParser();
3. Obtain an XML reader from the parser object
XMLReader xmlReader = sp.getXMLReader();
4. Set up event handlers for the reader
xmlReader.setContentHandler(new BookParserHandler());
5. Parse xml file
xmlReader.parse("book.xml");


Just using SAXParserFactory, SAXParser, they only need the following three steps to complete


1. Get the factory object for the sax parser
SAXParserFactory factory = SAXParserFactory.newInstance();
2. Create parser objects from factory object SAXParser
SAXParser saxParser = factory.newSAXParser();
3. Set parsed files and self-defined event handler objects by parsing the parse() method of saxParser
saxParser.parse(new File("src//sax//sida.xml"), new MyDefaultHandler());

Case: Resolve the text content in the Author element label

1. sida.xml file to parse

<?xml version="1.0" encoding="UTF-8"?>  
<! Four masterpieces of DOCTYPE [  
<! ELEMENT's four masterpieces (Journey to the West, Dream of Red Chamber)>  
<! ATTLIST Journey to the West ID #IMPLIED>  
]>  
<Four Great Books>  
    <Journey to the West id="x001">  
        <Author>Wu Chengen</Author>  
    </Journey to the West>  
    <Dream of Red Chamber id="x002">  
        <Author>Cao Xueqin</Author>  
    </Dream of Red Chamber>  
</Four Great Books> 

2. Parse implementation code for test class and event handler class

package sax;  
  
import java.io.File;  
  
import javax.xml.parsers.SAXParser;  
import javax.xml.parsers.SAXParserFactory;  
  
import org.junit.Test;  
import org.xml.sax.Attributes;  
import org.xml.sax.SAXException;  
import org.xml.sax.helpers.DefaultHandler;  
  
public class SaxTest {  
  
    @Test  
    public void test() throws Exception {  
        // 1. Get the factory object for the sax parser  
        SAXParserFactory factory = SAXParserFactory.newInstance();  
        // 2. Create parser objects from factory object SAXParser  
        SAXParser saxParser = factory.newSAXParser();  
        // 3. Set parsed files and self-defined event handler objects by parsing the parse() method of saxParser  
        saxParser.parse(new File("src//sax//sida.xml"), new MyDefaultHandler());  
  
    }  
  
    // Self-defined event handlers  
    class MyDefaultHandler extends DefaultHandler {  
  
        // Identifier that resolves the start and end of a label  
        boolean isOk = false;  
  
        @Override  
        public void startElement(String uri, String localName, String qName,  
                Attributes attributes) throws SAXException {  
            super.startElement(uri, localName, qName, attributes);  
            // Set isOK to true when parsing author element begins  
            if ("author".equals(qName)) {  
                isOk = true;  
            }  
        }  
  
        @Override  
        public void characters(char[] ch, int start, int length)  
                throws SAXException {  
            // TODO Auto-generated method stub  
            super.characters(ch, start, length);  
            // Print the contents of an element when the parsed identifier is true  
            if (isOk) {  
                System.out.println(new String(ch, start, length));  
            }  
        }  
          
        @Override  
        public void endElement(String uri, String localName, String qName)  
                throws SAXException {  
            super.endElement(uri, localName, qName);  
            // Set isOK to false when parsing the end of author element  
            if ("author".equals(qName)) {  
                isOk = false;  
            }  
        }  
  
    }  
} 

3. The results of the program are as follows:


Tags: xml Java JavaEE encoding

Posted on Sat, 13 Jul 2019 13:49:38 -0400 by hayson1991