Thông tin tài liệu:
SAX (Simple API for XML): API ñơn giảncho xử lý tài liệu XML.Phân tích truy xuất tuần tự.Các bộ phân tích SAX Parser xử lí thôngtin XML dưới dạng một dòng dữ liệu(single stream of data)(data). Dòng d lieu là mot chiêu, không the phântích theo hưng ngưc li.Dựa trên mô hình hướng sự kiện (eventdrive).
Nội dung trích xuất từ tài liệu:
SAX SAXPhạm Hồng Phong - SoICT – HUST SAXSAX (Simple API for XML): API ñơn giảncho xử lý tài liệu XML.Phân tích truy xuất tuần tự.Các bộ phân tích SAX Parser xử lí thôngtin XML dưới dạng một dòng dữ liệu(single stream of data). Dòng d li u là m t chi u, không th phân tích theo hư ng ngư c l i.Dựa trên mô hình hướng sự kiện (eventdrive). 2 SAXĐọc tệp XML từ trên xuống dưới theo mô hìnhhướng sự kiện Các ngôn ngữ lập trình cần ñịnh nghĩa ra các sự kiện và các hàm tương ứng với sự kiện. Người lập trình cần viết các Class dựa trên các hàm và NNLT ñể xử lý tài liệu XML.Không coi XML là một cây trên bộ nhớ, chỉ ghinhớ cấu trúc nhiệm vụ ñang thi hành trên bộnhớ. 3SAX 4 SAXƯu ñiểm Đơn giản Tốn ít tài nguyên bộ nhớ Tốc ñộ xử lý nhanh Tập trung vào dữ liệu ñang thực thiNhược ñiểm Không thể tác ñộng tới tài liệu XML Lưu trữ trạng thái phức tạp Khó khăn khi xử lý tài liệu XML lớn 5 SAXBao gồm 2 giao diện: XMLReader dùng ñể ñọc dữ liệu XML ContentHandler dùng ñể nhận dữ liệu 6 JAXPJAXP = Java API for XML Parsing Cung c p giao di n chung (Interface) đ t o và s d ng các APIs chu n c a SAX, DOM và XSLT trong Java. T t c các package c a JAXP có s n trong JDK 1.4+.javax.xml.parsers Các APIs chính của JAXP, cung cấp một Interface chung cho các bộ phân tích SAX và DOM.org.w3c.dom Định nghĩa các Document class (một DOM), và các classes cho các components của DOM.org.xml.sax Định nghĩa các SAX APIs cơ bản.javax.xml.transfor Định nghĩa các XSLT APIs ñể biếnm ñổi XML thành các dạng khác. 7 JAXPjavax.xml.parsers ñịnh nghĩa các lớp trừutượng DocumentBuilder (cho DOM) vàSAXParser (cho SAX) Nó cũng đ nh nghĩa các l p factory DocumentBuilderFactory and SAXParserFactory. M c đ nh, các l p này cho th c thi tham chi u - reference implementation” c a DocumentBuilder and SAXParser.JDK bao gồm cả 3 thực thi XML parser củaApache: Crimson: phiên b n đ u tiên – nh và nhanh, th c thi chu n cho J2SE 1.4. D a trên code dành cho Apache c a Sun. Xerces: nhi u tính năng, h tr XML Schema. D a trên code dành cho Apache c a Sun. Xerces 2: Tương lai, th c thi chu n cho J2SE 5.0. 8 DocumentBuilder java.io.File file = new java.io.File(c:/news.xml);javax.xml.parsers.DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();javax.xml.parsers.DocumentBuilder db = dbf.newDocumentBuilder();org.w3c.dom.Document doc=null; /* mô hình DOM */ if (file.exists()){ doc = db.parse(file); } if (doc != null) { /* xử lí */ NodeList nodes = doc.getElementsByTagName(content); for (int i = 0; i < nodes.getLength(); i++) { Element e = (Element) nodes.item(i); /* xử lí */ } } 9 Sử dụng SAX 1import javax.xml.parsers.*;import org.xml.sax.*;import org.xml.sax.helpers.*;// t o m t ñ i tương SAXParserSAXParserFactory factory = SAXParserFactory.newInstance();SAXParser saxParser = factory.newSAXParser();// kích ho t parser s d ng content handler c a ƯDsaxParser.parse(inputStream, myContentHandler);saxParser.parse(file, myContentHandler);saxParser.parse(url, myContentHandler); 10 Sử dụng SAX 2// Tạo SAX Factory SAXParserFactory spf = SAXParserFactory.newInstance();// Không validate file XML spf.setValidating(false);// Tạo SAX Parser SAXParser saxParser = spf.newSAXParser();// Tạo XML reader XMLReader reader = saxParser.getXMLReader(); FileReader file = new FileReader(thuVien.xml);// Gắn handle của lớp hiện hành vào reader reader.setContentHandler(new docXMLBangSax());// ñọc XML reader.parse(new InputSource(file)); 11Định nghĩa một Content HandlerPhương pháp ñơn giản: Tạo một Class mớikế thừa từ:org.xml.sax.helpers.DefaultHandlerGhi ñè các phương thức xử lý sự kiện(event - handling) từ DefaultHandler: startDocument() // receive notice of start of document endDocument() // receive notice of end of document startElement() // receive notice of start of each element endElement() // receive notice of end of each element characters() // receive a chunk of character data error() // receive notice of recoverable parser error // ...plus more... 12 startElement() và endElement() SAXParser sẽ phân tích callback ñể thông báo sự kiện ...