Parsing xml files using SAX

SAX parsing using JAXP (XMLReaderFactory, XMLReader, SAXParserFactory, and SAXParser) 1. We do this through XMLReaderFactory, XMLReader, as follows 1....

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:


13 July 2019, 13:49 | Views: 6162

Add new comment

For adding a comment, please log in
or create account

0 comments