intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

SAX

Chia sẻ: Cao Tuấn | Ngày: | Loại File: PDF | Số trang:20

111
lượt xem
6
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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).

Chủ đề:
Lưu

Nội dung Text: SAX

  1. SAX Phạm Hồng Phong - SoICT – HUST
  2. 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
  3. 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
  4. SAX 4
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. Đị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
  13. 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
  14. 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
  15. 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
  16. 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
  17. javax.xml.parsers DOM DocumentBuilder, DocumentBuilderFactory SAX SAXParser, SAXParserFactory Lỗi, ngoại lệ FactoryConfigurationError ParserConfigurationException 17
  18. 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
  19. 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. 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2