Cập nhật Không có trình phân tích cú pháp XML sẵn sàng trong cộng đồng Java có thể thực hiện phân tích cú pháp NIO và XML. Đây là gần nhất tôi tìm thấy, và nó không đầy đủ: http://wiki.fasterxml.com/AaltoHomeXMLStreamReader và một luồng thực
Tôi có đoạn mã sau:
InputStream input = ...;
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader streamReader = xmlInputFactory.createXMLStreamReader(input, "UTF-8");
Câu hỏi là, tại sao #createXMLStreamReader() phương pháp hy vọng sẽ có toàn bộ một tài liệu XML trong đầu vào suối? Tại sao nó được gọi là "trình đọc luồng", nếu nó dường như không thể xử lý một phần dữ liệu XML? Ví dụ: nếu tôi cho nguồn cấp dữ liệu:
<root>
<child>
cho nó, nó sẽ cho tôi biết tôi đang thiếu thẻ đóng. Ngay cả trước khi tôi bắt đầu lặp lại chính trình đọc luồng. Tôi nghi ngờ rằng tôi không biết cách sử dụng XMLStreamReader đúng cách. Tôi có thể cung cấp dữ liệu theo từng phần, đúng không? Tôi cần nó vì tôi đang xử lý một luồng XML đến từ ổ cắm mạng và không muốn tải toàn bộ văn bản nguồn vào bộ nhớ.
Cảm ơn bạn đã trợ giúp, Yuri.
Có, luồng có khả năng phải chứa toàn bộ tài liệu. Nhưng tại sao XMLStreamReader nên thử xác nhận tất cả nó lên phía trước? Đó là một dòng suối. Tại sao nó không thể đi cùng với dữ liệu và phân tích cú pháp những gì có sẵn? Và * nếu * nó gặp một lỗi, tôi sẽ tự xử lý nó. Đúng nếu tôi sai - bạn đang nói rằng nếu tôi đang đọc tài liệu XML có dung lượng 1 gigabyte trên mạng, tôi nên tải xuống tất cả và chỉ khi đó XMLStreamReader mới có thể lặp lại nó? –
Tôi nghĩ rằng nó sẽ không xác nhận cho đến khi toàn bộ luồng đã được xử lý (và đóng). Bạn không cần phải tải về toàn bộ điều đó, đó là những gì suối cho. Bạn đang viết thư cho luồng rồi đóng rồi cố gắng viết thêm? – cjstehno
Yuri, không, trình phân tích cú pháp Stax sẽ KHÔNG đọc nó hoàn toàn trước tiên; bạn chắc chắn có thể bắt đầu đọc ngay lập tức và trình phân tích cú pháp sẽ chỉ chặn nếu nó chưa có bất kỳ dữ liệu nào để phân tích cú pháp. Tôi không biết vấn đề là gì, nhưng sự hiểu biết của bạn là chính xác. – StaxMan