我顶,我顶。
JAVA版没人会用SAX吗??

解决方案 »

  1.   

    这个很容易处理。
    不过还是要根据你的xml的格式。
    我想你的xml肯定具有一定的规律性。根据你上面说的,你可以使用代理的方法。对于Item,你只需要深成你自己的对象,然后把这个对象加入到你的代理器中,至于代理器,
    你应该通过不同的item的上级元素变换。不过话又说回来,如果你的xml数据,节点一点规律性都没有,那
    呵呵,代理器的生成,我一般都在endElement里面完成
      

  2.   

    我以前就是用sax的,其实我认为这个是个个人问题,如果你勤快点,或者项目需要,可能就用sax.
    对那些太自动化的工具,不是不喜欢,而是很多不满足自己的要求。
    要区分各种同名节点,我势必要定义非常多的状态值
    =======
    其实就是一个比对enum,这个不麻烦,至于状态值怎么保存,看你需要和处理了
    其实明白一点就行,dom是把整个xml读到内存,然后再分析。sax是边读边回调处理,处理的部分由用户做,怎么做,就是你的事了。
      

  3.   

    在解析的时候设置一个堆栈或者一个list变量,在节点开始的方法里往堆栈或者list里放一个标记,在节点结束的方法里把这个标记删除,这样在任何你需要的时候都可以判断你的<item>是在哪一个path下面。
    希望你的xml文件能符合一定的dtd或者schema,否则你会很麻烦。
      

  4.   

    HIA HIA,偶用过,如果你要根据XML生成一大批的对象,定义非常多的状态值显然是一种比较不妥的做法,酱紫会导致你那段程序过于庞大&复杂。
    你可以将解析过程中新产生的对象用LinkedList做个stack保存起来,每次startElement你有可能创建一个对象吧?(或者你也可能在endElement中创建)。创建完之后,将其入栈,酱紫characters处理的就是针对栈顶业务对象的内容,你完全可以将节点名、内容扔给业务对象某个函数去处理,endElement处你可以选择是否要将业务对象出栈。
    哦?好像说的有点复杂,简单D说,把SAX事件处理器做为事件分发器,将事件分给栈顶对象去处理,酱紫某个对象只处理XML的一小部分。