**Java API for XML Processing**, hay **JAXP**, là một trong các API cho lập trình Java XML. Nó cung cấp khả năng kiểm chứng và phân tích các tài liệu XML. Hai loại giao diện (*interface*) để phân tích cơ bản là:

* Giao diện phân tích dạng Mô hình đối tượng tài liệu (*Document Object Model*) - viết tắt là **DOM**
* Giao diện phân tích API đơn giản dành cho XML (*Simple API for XML*) - viết tắt là **SAX**

Giao diện thứ ba, với hứa hẹn là sẽ được thêm vào trong xuất bản lớn sắp tới của Java (tên hiệu Mustang), đang được dự kiến sẽ ra vào cuối năm 2006 là:

* StAX, API dẫn luồng cho XML (*the Streaming API for XML*). JSR #173.

Cùng với các giao diện phân tích, API này còn cung cấp một giao diện XSLT để cung cấp việc chuyển đổi dữ liệu và cấu trúc từ một tài liệu XML sang một dạng khác.

J2SE 1.4 JDK là phiên bản đầu tiên mà có kèm theo JAXP 1.1.

### Giao diện DOM

Giao diện DOM có lẽ là một giao diện dễ hiểu nhất. Nó phân tích toàn bộ tài liệu XML và kiến thiết một cấu trúc hoàn chỉnh đại diện cho bản tài liệu, trong bộ nhớ, bằng cách dùng các lớp để mô hình hóa các khái niệm đã ghi trong Tài liệu chi tiết đặc tả kĩ thuật của Document Object Model(DOM) Cấp độ 2.

Bộ phân tích DOM được gọi là **DocumentBuilder**, vì nó tạo nên một hình thức đại diện cho *Document* trong bộ nhớ. *javax.xml.parsers.DocumentBuilder* được tạo nên bởi *javax.xml.parsers.DocumentBuilderFactory*. **DocumentBuilder** tạo ra một *trường hợp* của *org.w3c.dom.Document*, tức một cấu trúc cây chứa các *nốt* trong Tài liệu XML. Mỗi nốt cây trong cấu trúc thực hiện một giao diện *org.w3c.dom.Node*. Có nhiều loại nốt cây đại diện cho loại dữ liệu tìm thấy trong bản tài liệu XML. Loại nốt quan trọng nhất là:

* *Nốt phần tử*. Loại này có thể có các *thuộc tính* nằm ở bên trong.
* *Nốt văn bản*. Loại này đại diện cho phần văn bản nằm giữa *thẻ mở* và *thẻ đóng* của một *phần tử tài liệu*.

Xem tài liệu javadoc của gói `org.w3c.dom` để có danh sách đầy đủ mọi loại nốt.

#### Ví dụ

````
 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;
 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ý */
 }
 }
````

### Giao diện SAX

Bộ phân tích SAX được gọi là **SAXParser** và được tạo bằng *javax.xml.parsers.SAXParserFactory*. Khác với bộ phân tích DOM, bộ SAXParser không tạo ra một hình thức đại diện của tài liệu XML trong bộ nhớ và vì thế nó hoạt động nhanh hơn, ít tốn bộ nhớ hơn. Thay vào đó, bộ phân tích SAXParser thông báo cho các trình khách cấu trúc của tài liệu XML bằng cách gọi các hàm *callbacks*, nghĩa là, bằng cách gọi các *phương pháp* của *trường hợp*
`org.xml.sax.helpers.DefaultHandler`
đã được cung cấp cho bộ phân tích.

Lớp *DefaultHandler* nằm trong gói org.xml.sax.helpers. Lớp này *thực hiện* các giao diện *ContentHandler*,
*ErrorHandler*, *DTDHandler*, và *EntityResolver*. Đại bộ phận các trình khách chỉ quan tâm đến những *phương pháp* được định nghĩa trong giao diện *ContentHandler* mà thôi.

Các *phương pháp* của giao diện *ContentHandler*, được *DefaultHandler* thực hiện, được gọi đến khi bộ phân tích SAX bắt gặp những phần tử tương ứng trong bản tài liệu XML. Những *phương pháp* chủ yếu trong giao diện này bao gồm:

* phương pháp *startDocument()* và *endDocument()*. Những phương pháp này được gọi lúc mở đầu và khi kết thúc một bản tài liệu XML.
* phương pháp *characters()*. Phương pháp này được gọi với nội dung văn bản giữa các *thẻ mở* và *thẻ đóng* của một phần tử trong bản tài liệu XML.

Các trình khách cung cấp một *phân lớp* của *DefaultHandler*. Phân lớp này được sử dụng để *lấn quyền* những phương pháp trên và xử lý dữ liệu. Quá trình này có thể bao gồm việc lưu trữ dữ liệu vào trong cơ sở dữ liệu, hoặc viết chúng ra một *luồng* (dữ liệu).

### Giao diện XSLT

*Ngôn ngữ tập tin định dạng XML dành cho việc chuyển đổi* - (The **X**ML **S**tylesheet **L**anguage for **T**ransformations, hay **XSLT**) cho phép biến đổi một bản tài liệu XML sang các dạng thức dữ liệu khác.

### Tài nguyên bổ trợ

* Xem Sun's JAXP product description
* Xem Document Object Model(DOM) Level 2 Core Specification
* Một số chương trình mẫu dùng bộ phân tích DOM và SAX Hướng dẫn: XML với Xerces cho Java

Tham khảo
---------