Tôi có vấn đề sau: Tôi có các tệp XML rất lớn (như 300+ Megs) và tôi cần phân tích chúng để thêm một số giá trị của chúng vào db. Cấu trúc của các tệp này cũng rất phức tạp. Tôi muốn sử dụng Stax Parser vì nó cung cấp khả năng kéo-phân tích cú pháp (và do đó xử lý) chỉ một phần của tệp XML tại một thời điểm, và do đó không tải toàn bộ điều trong bộ nhớ, nhưng mặt khác nhận được các giá trị với Stax (ít nhất là trên các tập tin XML) là cồng kềnh, tôi cần phải viết một tấn mã. Từ quan điểm sau này, nó sẽ vô cùng giúp tôi nếu tôi có thể sắp xếp tệp XML thành các đối tượng Java (như JAX-B), tuy nhiên điều này sẽ tải toàn bộ tệp cùng với một tấn các cá thể Object trong bộ nhớ cùng một lúc.Phân tích cú pháp các tệp XML rất lớn và marshalling đối tượng Java
Câu hỏi của tôi là, có cách nào để phân tích cú pháp (hoặc phân tích cú pháp một phần) tập tin tuần tự, và sau đó chỉ sửa đổi các phần đó với đối tượng Java để tôi có thể xử lý chúng một cách dễ dàng mà không bị bẻ khóa trên bộ nhớ?
Tốt để biết prob của bạn được giải quyết. Chỉ cần tự hỏi làm thế nào là điều này (soln trong bài đăng này) khác với những gì tôi đã đăng? – Kashyap
Vâng, trung thực nó là một phần lo sợ của các khuôn khổ lớn, một phần lười biếng :) (cả hai đều là xấu và đáng tiếc). Trước hết, từ tài liệu EMF có vẻ như là một khung công tác khá liên quan, nó không chỉ dành cho việc xử lý XML mà còn cho rất nhiều thứ khác, và tôi luôn cố gắng tránh những khung công tác nặng nề bất cứ khi nào có thể (đây chỉ là sở thích cá nhân, nói là xấu để làm điều đó nói chung). Thứ hai, tôi lười biếng, và EMF sử dụng các API phân tích cú pháp XML không chuẩn mà tôi cũng không biết vì điều này tôi đã sử dụng giải pháp này với các API Java XML chuẩn. –
Thật vậy, cho dù bạn có thích EMF hay không, tôi khuyên KHÔNG nên sử dụng nó ("** vì EMF là một cái búa quá lớn cho một vấn đề nhỏ như vậy. **") trừ khi bạn không có lựa chọn. Và abt phân tích cú pháp, để trích dẫn một lần nữa "vì vậy ** chỉ phân tích bằng cách sử dụng bất cứ điều gì bạn muốn **, tạo một số StringStream hoặc một cái gì đó cho mỗi trong một vòng lặp và ** vượt qua để JAX-B hoặc EMF. **" –
Kashyap