SAX
lượt xem 6
download
SAX (Simple API for XML): API ñơn giản cho 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ông tin 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ân tích theo hưng ngưc l i. Dựa trên mô hình hướng sự kiện (event drive).
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: SAX
- SAX Phạm Hồng Phong - SoICT – HUST
- SAX SAX (Simple API for XML): API ñơn giản cho 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ông tin 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 (event drive). 2
- SAX Đọc tệp XML từ trên xuống dưới theo mô hình hướ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ỉ ghi nhớ cấu trúc nhiệm vụ ñang thi hành trên bộ nhớ. 3
- SAX 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 thi Nhượ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
- SAX Bao gồm 2 giao diện: XMLReader dùng ñể ñọc dữ liệu XML ContentHandler dùng ñể nhận dữ liệu 6
- JAXP JAXP = 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ến m ñổi XML thành các dạng khác. 7
- JAXP javax.xml.parsers ñịnh nghĩa các lớp trừu tượ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ủa Apache: 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 1 import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; // t o m t ñ i tương SAXParser SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); // kích ho t parser s d ng content handler c a ƯD saxParser.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 Handler Phương pháp ñơn giản: Tạo một Class mới kế thừa từ: org.xml.sax.helpers.DefaultHandler Ghi ñè 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: startElement(String namespaceURI, String localName, String qName, Attributes atts) endElement(String namespaceURI, String localName, String qName) Đối với các trường hợp ñơn giản, b qua namespaceURI và localName, và ch s d ng qName (the “qualified” name). startElement() và endElement() là các s ki n luôn xu t hi n theo c p: “” s sinh ra l i g i: startElement("", "", "foo", null) endElement("", "", "foo") 13
- SAX Attributes Mỗi lời gọi tới startElement() bao gồm Attributes ñể biểu diễn tất cả các thuộc tính XML cho element ñó. Các phương thức trong giao diện Attributes getLength() // return number of attributes getIndex(String qName) // look up attribute's index by qName getValue(String qName) // look up attribute's value by qName getValue(int index) // look up attribute's value by index // ... and others ... 14
- SAX characters() Thẻ sự kiện (event handler) characters() nhận khai báo của các dữ liệu kí tự dạng plain text, chẳng hạn Nội dung không thuộc về phần tử XML nào. public void characters(char[] ch, /* buffer containing chars */, int start, start position in buffer */, int length */num of chars to read ) Có thể ñược gọi rất nhiều lần bên trong mỗi một block các kí tự, ví dụ mỗi lần gọi một dòng. Có thể sử dụng ñể gộp các dữ liệu kí tự vào một Stringbuffer và dừng việc gộp lại ở lần gọi startElement()kế tiếp. 15
- SAX Phương thức tổng quát: tạo ra một XML parser, phân tích documents, và nhận thông tin của document. “Streaming” information set ng d ng đăng ký handlers B Parser “đ y ” thông tin vào handlers • Tu n t (“as you see it”) ng d ng ch s d ng các thông tin nó c n. 16
- javax.xml.parsers DOM DocumentBuilder, DocumentBuilderFactory SAX SAXParser, SAXParserFactory Lỗi, ngoại lệ FactoryConfigurationError ParserConfigurationException 17
- SAX Phân tích Document Tạo một thể hiện của SAX parser factory SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware(true); factory.setValidating(false); Tạo bộ phân tích SAX parser SAXParser parser = factory.newSAXParser(); Phân tích tài liệu parser.parse(“document.xml”, new MyHandler()); 18
- So sánh SAX và DOM SAX = Simple API cho XML DOM = Document Object Model Đặc tả Java Chuẩn W3C ñể trình bày các tài liệu có cấu trúc. Là nền tảng và trung lập ngôn ngữ Duyệt XML như luồng các Events Duyệt XMl như cây của các Node SAX Parser sẽ kích hoạt các event Xây dựng mô hình dữ liệu (data – handler khi phân tích model) trong bộ nhớ Truy xuất tuần tự Khả năng truy xuất dữ liệu ngẫu nhiên, hiệu quả cho các ứng dụng tương tác Rất nhanh, tốn ít tài nguyên Đòi hỏi CPU và Memory mạnh Là lựa chọn tốt khi: Mô hình dữ liệu Hiệu quả khi mô hình dữ liệu có không cần thiết Hoặc cấu trúc bản cấu trúc cây các nút. chất cho mô hình dữ liệu là List hoặc Matrix 19
- 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Làm việc với XML trên Android
13 p | 179 | 60
-
Các ứng dụng của một XML Parser
9 p | 214 | 42
-
Java and XML Data Binding
200 p | 158 | 33
-
Tự học XML part 6
9 p | 117 | 25
-
Thao tác trên XML part 5
12 p | 74 | 22
-
Lập trình Android 3
6 p | 143 | 16
-
Thao tác XML - Giới thiệu không gian tên System.Xml
4 p | 101 | 9
-
Thao tác XML - Đọc và ghi Streamed XML – Phần 1
13 p | 96 | 9
-
Bài giảng DOM-DSO - Nguyễn Đức Cương
72 p | 79 | 9
-
Giáo trình hình thành hệ thống cấu tạo boolean trong Androi để tạo một View riêng p1
10 p | 66 | 8
-
Bài giảng DOM & SAX XML & ADO.NET
31 p | 46 | 8
-
Giáo trình phân tích khả năng ứng dụng các lớp giao diện boolean trong Androi để tạo một View riêng p8
5 p | 76 | 7
-
XSLT processing with Java
37 p | 56 | 7
-
SAX Parsing
21 p | 37 | 2
-
Phát hiện bất thường trên chuỗi thời gian dạng luồng: Một giải thuật dựa vào phân đoạn
11 p | 7 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn