tôi cảm thấy khá ra chiều sâu của tôi hỏi câu hỏi này, vì mặc dù đọc official docs và các nguồn lực liên kết trong những câu hỏi này:Chơi Framework 2.0 BodyParser - đẩy phân tích cú pháp XML suối
How to understand `Iteratee` in play2?
Can't understand Iteratee, Enumerator, Enumeratee in Play 2.0
... Tôi vẫn còn khá mơ hồ về lặp lại, điều tra viên, và mô hình phản ứng của Play 2.0 nói chung. Tuy nhiên, tôi muốn thiết lập một dịch vụ web cho phép tôi tải lên các tệp XML (> 100MB) lớn, chọn ra một số NodeSeq cụ thể (không xen kẽ), xử lý chúng và truyền kết quả lại cho máy khách.
Tôi tìm điều đầu tiên tôi cần làm là viết một BodyParser có khối byte, cấp chúng cho một trình phân tích cú pháp XML, và phát ra một luồng các NodeSeq mà tôi muốn, nói theo cách lười biếng.
Có ai có thể cung cấp bất kỳ hướng dẫn và/hoặc ví dụ nào minh họa cách thực hiện điều này không?
Cập nhật: Nhiều nền: -
XML của tôi thực sự là một tài liệu Solr add
, vì vậy nó trông giống như:
<add>
<doc>
<field name="name">Some Entity</field>
<field name="details">Blah blah...</field>
...
</doc>
...
</add>
Tôi muốn để xử lý mỗi <doc>
một cách trực tuyến, vì vậy phân tích cú pháp của tôi sẽ rõ ràng là phải đợi cho đến khi nó nhấn một sự kiện bắt đầu <doc>
, đệm mọi thứ cho đến khi sự kiện kết thúc </doc>
tương đương, và phát ra một NodeSeq của phần tử đã hoàn thành và sau đó xóa bộ đệm của nó.
Cách thức này sẽ hoạt động với Play BodyParser, tôi không hoàn toàn chắc chắn. Cập nhật thêm nếu tôi có thể làm rõ thêm những gì tôi muốn làm!
Mặc dù toàn bộ tệp XML là lớn, mỗi phần tử <doc />
của chính nó là khá nhỏ, mặc dù tôi rõ ràng sẽ phải kiểm tra bộ đệm byte không vượt quá một kích thước nhất định.
Bạn cần phải rechunk đúng NodeSeqs của bạn, là có bất kỳ dấu phân cách giữa chúng? làm thế nào để bạn biết rằng một NodeSeq là hoàn thành? – Sadache
Hi @Sadache - Tôi hy vọng làm rõ câu hỏi của tôi về vấn đề này, cảm ơn vì đã có một cái nhìn. – Mikesname
Xin chào, cuối cùng bạn đã tìm được giải pháp chưa? – Loic