2012-05-14 19 views
7

Cả hai dường như đều có cùng một mục đích (tạo một XMLReader). Một số hướng dẫn có chứa một, một số khác.Sự khác biệt SAXParserFactory XMLReaderFactory. Bạn chọn cái nào?

SAXParserFactory:

mã ví dụ:

// SAXParserFactory 
SAXParserFactory factory = SAXParserFactory.newInstance(); 
SAXParser parser = factory.newSAXParser(); 
XMLReader reader = parser.getXMLReader(); 
reader.parse(new InputSource("document.xml")); 

XMLReaderFactory:

mã ví dụ:

// XMLReaderFactory 
XMLReader xmlReader = XMLReaderFactory.createXMLReader(); 
xmlReader.parse(new InputSource("document.xml")); 

câu hỏi:

Là những khác biệt chính hoặc đang có một số tôi đã giám sát.

Bạn nên chọn loại nào?

+0

SAXParserFactory là JAXP, trong khi XMLReaderFactory là "SAX API" chính thức. Tôi nhớ cuốn sách SAX2 cũ từ O'Reilly đề xuất API chính thức, do cách thức mà nó xử lý các không gian tên. Tôi không biết liệu điều này có liên quan nữa không. Nhưng, tôi đoán tôi sẽ sử dụng XMLReaderFactory trừ khi tôi cần JAXP vì lý do nào đó. Có thể ai đó khác có thể cung cấp thêm một số đầu vào hiện tại. –

Trả lời

4

Chính JAXP APIs được xác định trong gói javax.xml.parsers. Gói đó chứa các lớp nhà máy trung lập của nhà cung cấp như SAXParserFactory cung cấp cho bạn S AXParser.

SAXParserFactory định nghĩa API nhà máy cho phép ứng dụng định cấu hình và thu thập trình phân tích cú pháp dựa trên SAX để phân tích cú pháp tài liệu XML.

  • SAXParser xác định API bao bọc lớp triển khai XMLReader .

  • Gói org.xml.sax xác định các API SAX cơ bản.

  • Java Runtime đi kèm với một thực hiện mặc định XMLReader

Các SAXParserFactory ẩn chi tiết trong đó (SAX1)/(sax2) XMLReaderFactory ParserFactory, ... từ bạn.

Nếu bạn muốn để có thể thay thế các Parser mặc định JAXP bởi một khác nhau JAXP Parser (có thể có một incomapatibilty tiếng/lỗi trong việc thực hiện mặc định) thực hiện bạn nên sử dụng các nhà cung cấp trung lập SAXParserFactory.

Nếu bạn biết rằng ứng dụng của bạn sẽ allways sử dụng SAX2XMLReader bạn có thể sử dụng XMLReaderFactory.

2

Elliotte Rusty Harold, người đã viết một cuốn sách về xử lý XML trong Java, đã từng viết:

SAXParserFactory [is] a hideous, evil monstrosity of a class that should 
be hung, shot, beheaded, drawn and quartered, burned at the stake, 
buried in unconsecrated ground, dug up, cremated, and the ashes tossed 
in the Tiber while the complete cast of Wicked sings "Ding dong, the 
witch is dead." --Elliotte Rusty Harold on xml-dev 

tôi sẽ không thực sự đi xa (và nếu tôi đã làm, tôi sẽ cố gắng và làm cho nó về ngữ pháp). Giống như rất nhiều JAXP, nó không phải là phần thiết kế tuyệt vời nhất; nhưng tôi sử dụng nó như là cách mặc định để có được một cá thể phân tích cú pháp, nếu chỉ vì nó phù hợp với các phần khác của JAXP.

Trước đây, cả hai được phát triển song song. JAXP ban đầu đã cố gắng thêm chức năng bị thiếu vào SAX1, nhưng song song, SAX2 đã đi theo và lấp đầy một số khoảng trống, vì vậy khoảng cách đặc biệt này đã được lấp đầy hai lần.