- XML Text nodes
- XML Element nodes
- XML Processing Instructions
- XML Comments
Events are fired when each of these XML features are encountered, and again when the end of them is encountered. XML attributes are provided as part of the data passed to element events.
SAX parsing is unidirectional; previously parsed data cannot be re-read without starting the parsing operation again.
Previous chapter - Java sax parser example code
SAX parser handler Java code
OrderXMLHandler class extends DefaultHandler to listen for call back events. We have to register this handler with the Sax parser to notify us of call back events.package com.as400samplecode; import java.util.ArrayList; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class OrderXMLHandler extends DefaultHandler { boolean currentElement = false; String currentValue = null; Order order = null; OrderDetail orderDetail = null; ArrayList<OrderDetail> orderDetailList; ArrayList<Order> orderList = new ArrayList<Order>(); public ArrayList<Order> getOrderList() { return orderList; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { currentElement = true; if (qName.equals("Order")){ order = new Order(); orderDetailList = new ArrayList<OrderDetail>(); order.setOrderType(attributes.getValue("Type")); } else if (qName.equals("OrderLine")) { orderDetail = new OrderDetail(); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { currentElement = false; if (qName.equalsIgnoreCase("OrderID")) order.setOrderID(currentValue); else if (qName.equalsIgnoreCase("CustNumber")) order.setCustNumber(currentValue); else if (qName.equalsIgnoreCase("OrderDate")) order.setOrderDate(currentValue); else if (qName.equalsIgnoreCase("CustPONumber")) order.setCustPONumber(currentValue); else if (qName.equalsIgnoreCase("OrderTotal")) order.setOrderTotal(currentValue); else if (qName.equalsIgnoreCase("OrderlineID")) orderDetail.setOrderlineID(currentValue); else if (qName.equalsIgnoreCase("ItemID")) orderDetail.setItemID(currentValue); else if (qName.equalsIgnoreCase("ItemDescription")) orderDetail.setItemDescription(currentValue); else if (qName.equalsIgnoreCase("Quantity")) orderDetail.setQuantity(currentValue); else if (qName.equalsIgnoreCase("Price")) orderDetail.setPrice(currentValue); else if (qName.equalsIgnoreCase("Order")){ order.setOrderDetail(orderDetailList); orderList.add(order); } else if (qName.equalsIgnoreCase("OrderLine")) orderDetailList.add(orderDetail); } @Override public void characters(char[] ch, int start, int length) throws SAXException { if (currentElement) { currentValue = new String(ch, start, length); currentElement = false; } } }
SAX parser Java main method implementing the parser
package com.as400samplecode; import java.io.File; import java.util.ArrayList; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; public class ParseOrder { public static void main( String[] args ) { try { OrderXMLHandler myXMLHandler = new OrderXMLHandler(); SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); sp.parse(new File("Order.xml"),myXMLHandler); ArrayList<Order> orderList = myXMLHandler.getOrderList(); for(int i=0;i<orderList.size();i++){ Order order = orderList.get(i); System.out.println("OrderID: " + order.getOrderID() + " ----------->"); System.out.println("Type: " + order.getOrderType()); System.out.println("Date: " + order.getOrderDate()); System.out.println("Customer: " + order.getOrderType()); System.out.println("PO: " + order.getCustPONumber()); System.out.println("Total: " + order.getOrderTotal()); ArrayList<OrderDetail> orderDetailList = order.getOrderDetail(); for(int j=0;j<orderDetailList.size();j++){ OrderDetail orderDetail = orderDetailList.get(j); System.out.println("LineID: " + orderDetail.getOrderlineID() + " ----->"); System.out.println("Item: " + orderDetail.getItemID()); System.out.println("Description: " + orderDetail.getItemDescription()); System.out.println("Price: " + orderDetail.getPrice()); System.out.println("Quantity: " + orderDetail.getQuantity()); } } } catch (Exception e) { System.out.println(e); } finally { } } }
No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.