尽管阅读了官方文档和这些问题中链接的资源,但我觉得问这个问题有点离题了:
Play 2.0中看不懂Iteratee、Enumerator、Enumeratee
...我对迭代器、枚举器和 Play 2.0 的反应模型仍然很模糊。但无论如何,我想设置一个 Web 服务,允许我上传大型 XML (>100MB) 文件,挑选某些特定的(非交错的)NodeSeq,处理它们,并将结果流式传输回客户端。
我认为我需要做的第一件事是编写一个 BodyParser,它接收大块字节,将它们提供给 XML 解析器,然后<doc>...</doc>
以一种懒惰的方式发出我想要的 NodeSeq 流。
任何人都可以提供任何指导和/或示例来说明如何实现这一点吗?
更新:更多背景:-
我的 XML 实际上是一个 Solradd
文档,所以它看起来像:
<add>
<doc>
<field name="name">Some Entity</field>
<field name="details">Blah blah...</field>
...
</doc>
...
</add>
我想以<doc>
流的方式处理每一个,所以我的解析器显然必须等到它遇到一个<doc>
开始事件,缓冲所有内容直到等效的</doc>
结束事件,并发出一个已完成元素的 NodeSeq,然后刷新它的缓冲区。
这将如何与 Play BodyParser 一起工作,我不完全确定。如果我能进一步澄清我想要做什么,则会有更多更新!
尽管整个 XML 文件很大,但每个<doc />
元素本身都非常小,尽管我显然必须检查字节缓冲区是否没有超过一定的大小。