因为公司的原因,原来的产品解析XML是用DOM解析的,但是考虑到DOM解析太占内存,所以就想将DOM解析全部转为SAX解析。请问哪位大哥 做过类似的东西, 因为涉及的文件较多,有没有比较简单点的方法??? 谢了

解决方案 »

  1.   


            private Document readXML(String xmlFilePath)
    {//读取一个XML文档
    //DOMBuilder input=new DOMBuilder(); //用此方式则会有根节点声明属性无法通过的问题(并且比较占内存)
    SAXBuilder input=new SAXBuilder(); //sax解析
    Document docment=null;
    File file=new File(xmlFilePath);  //xmlFilePath是xml文件路径
    try{
    docment=input.build(file);
    }catch (JDOMException e1) {
    e1.printStackTrace();
    }
    return docment;
    }
      

  2.   

    (1)使用JDOM首先要指定使用什么解析器。如:
              SAXBuilder builder=new SAXBuilder(false); 这表示使用的是默认的解析器
    (2)得到Document,我们以后要进行的所有操作都是对这个Document操作的:
              Document doc=builder.build(xmlpath);
    (3)得到根元素:
              Element books=doc.getRootElement();
    在JDOM中所有的节点(DOM中的概念)都是一个org.jdom.Element类,当然他的子节点也是一个org.jdom.Element类。
    (4)得到元素(节点)的集合:
            List booklist=books.getChildren("book");
    这表示得到“books”元素的所在名称为“book”的元素,并把这些元素都放到一个List集合中
      

  3.   

    楼主是说怎么用sax解析吧,事件驱动,不难!
      

  4.   

    推荐你看看孙鑫写的那本《xml,xml schema xslt2.0和XQuery开发详解》这本书,上面有详细的介绍,
    由浅入深,非常不错的。学过之后你会对xml方面的编程有很大的收获。
      

  5.   

    4楼和5楼说的是jdom解析吧,我想用sax解析, 而且我想在sax里面像DOM一样可以通过节点名就可以得到相应的节点值,请问可以实现么??难道要在sax解析的时候 都存到一个hashmap里面,然后再取??
      

  6.   

    SAX就是事件驱动,要是弄节点,那就叫DOM。
      

  7.   


    你用SAX解析存入一个hashmap里然后再取,跟直接用DOM有什么不同么?不都是要把所有的数据都放入内存用SAX的好处就是因为SAX是事件驱动,读过的数据要抛弃掉