posts - 211,  comments - 582,  views - 53万
唉,这也是迫于无奈。当初看Exodus的代码的时候,还嘲笑他为什么要自己去做那么多XML解析的工作。现在才发现,还真的不得不自己来做。
XMPP的XML Stream的形式就是一篇XML Document分节发过来。所以理想状况是这边接收到一点XML就Push到一个SAX Parser中,然后得到SAX Event把累积的XML交给一个DOM Parser解析出各个XML Stanza。这里一个问题是没有这样的SAX Parser允许你收一点那边做一点的。一般是会读到了EOF就罢工了的。而且从SAX Event中你也很难得到你要的XML Stanza起始位置和终结位置从而取出XML交给DOM Parser。结果往往是要自己从SAX Event中跳过DOM Parser自己来完成DOM的组装过程。
我现在的做法就是从SAX Parser中剥离出tokenizer部分,然后自己来做SAX解析,并且把不能解析的部分留给下一次,与下次Push进来的XML一起做解析。然后自己根据tokenizer取出的token的信息来拼装简版的DOM(只有Element和Text,但是对XMPP已经够用了,不够再加)。最后的形式就是这边提供一个Push方法,以及五个事件OnStreamBegin, OnStreamEnd, OnStanza, OnStreamError, OnParserError。
一开始的时候尝试过完全自己来写,发现那些代码太丑了,还是用别人写好了的比较好。无论如何,总算避免了完全手工的字符串比对,比Exodus那一套是强得多了。
posted on   taowen  阅读(889)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示