2012-12-14 37 views
6

Sự khác nhau giữa hai đoạn mã dưới đây, nếu tôi chỉ cần phân tích cú pháp XML là gì?Sự khác biệt giữa SAXParser và XMLReader

1.By sử dụng SAXParser parse phương pháp:

SAXParserFactory sfactory = SAXParserFactory.newInstance(); 
SAXParser parser = sfactory.newSAXParser(); 
parser.parse(new File(filename), new DocHandler()); 

Bây giờ sử dụng phương pháp parse XMLReader của mua từ SAXParser

SAXParserFactory sfactory = SAXParserFactory.newInstance(); 
SAXParser parser = sfactory.newSAXParser(); 
XMLReader xmlparser = parser.getXMLReader(); 
xmlparser.setContentHandler(new DocHandler()); 
xmlparser.parse(new InputSource("test1.xml")); 

Mặc dù nhận được sự linh hoạt hơn, là có bất kỳ sự khác biệt nào khác không?

Trả lời

8

Phương thức parse của SAXParser chỉ ủy quyền cho phiên bản nội bộ XMLReader và thường thuận tiện hơn. Đối với một số giai đoạn nâng cao hơn, bạn phải sử dụng XMLReader. Một số ví dụ sẽ

  • Thiết tính năng phi tiêu chuẩn của việc thực hiện
  • Thiết lớp khác nhau như ContentHandler, EntityResolver hoặc ErrorHandler
  • Switching xử lý khi phân tách
0

http://docs.oracle.com/javase/1.5.0/docs/api/org/xml/sax/XMLReader.html. hãy xem liên kết cho trình đọc XML và xem liên kết sau đây cho trình phân tích cú pháp sax. http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/parsers/SAXParser.html.

Sử dụng trình phân tích cú pháp khác nhau tùy thuộc vào những gì bạn muốn trình phân tích cú pháp của mình thực hiện. Nếu bạn sửa đổi, xóa nội dung trong xml, bạn có thể sử dụng trình phân tích cú pháp W3C Dom. Nếu bạn chỉ muốn phân tích và nhận các phần tử, bạn có thể sử dụng trình phân tích cú pháp SAX. Có một vài trong số đó. Vì vậy, nó thực sự phụ thuộc vào những gì bạn muốn.

+0

Xin lỗi nhưng tôi biết DOM phân tích cú pháp . Tôi chỉ muốn biết tại sao SAXParser cũng như XMLReader đều cung cấp phương thức 'parse'. Có lý do kỹ thuật nào không? – sakura

3

Khi bạn nhận thấy XMLReader thuộc về org.xml.sax (xuất phát từ http://www.saxproject.org/) và SAXParser tới javax.xml.parsers. SAXParser sử dụng nội bộ XMLReader. Bạn có thể làm việc với XMLReader trực tiếp

XMLReader xr = XMLReaderFactory.createXMLReader(); 
xr.setContentHandler(handler); 
xr.setDTDHandler(handler); 
... 

nhưng bạn sẽ thấy rằng SAXParser thuận tiện hơn để sử dụng. Đó là, SAXParser đã được thêm vào để thuận tiện.

Các vấn đề liên quan