• 自己打造SAX和DOM Parser


    唉,这也是迫于无奈。当初看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那一套是强得多了。
  • 相关阅读:
    getopt 命令行参数解析
    Linux下使用indent整理代码
    终端常用快捷键
    gedit 乱码解决
    linux sysrq
    linux下的文件审计功能(audit inotify)
    gdb基本命令
    linux shell 字符截断
    linux 设置时间 date命令
    Ubuntu 时间同步
  • 原文地址:https://www.cnblogs.com/taowen/p/94749.html
Copyright © 2020-2023  润新知